12

Androidデバイスの場所を10分ごとにサーバーに投稿しようとしています。これを行うためにfirebaseジョブディスパッチャを使用しています

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job myJob = dispatcher.newJobBuilder()
    .setService(UpdateLocationService.class)
    .setRecurring(true)
    .setTrigger(Trigger.executionWindow(10, 20))
    .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
    .setTag("location-update-job")
    .setLifetime(Lifetime.FOREVER)
    .build();
dispatcher.mustSchedule(myJob);

UpdateLocationService場所を取得してサーバーに送信します。

私の問題:物事はほとんどうまくいっています。唯一のことは、ジョブが 4m、6m、7m、8m、10m、16m、23m の差でスケジュールされていることです...

誰かが私が起こっていることを理解するのを手伝ってくれませんか.

更新: 場所が 10 ~ 20 分に 1 回必要です。上記のコードでは、テスト目的のためだけに値が低すぎます

4

3 に答える 3

4

これが発生する理由はいくつかあります。まず、あなたの仕事は に戻りfalseますonStopJob()か? ドキュメントから

@Override
public boolean onStopJob(JobParameters job) {
    return false; // Answers the question: "Should this job be retried?"
}

ジョブを再試行する必要がある場合は、バックオフが適用されます。これを、10 ~ 20 秒ごとに再度実行するという事実と組み合わせると、経験している結果が得られる可能性があります。

ジョブに制約を設定していません。これは、ジョブの実行時期にも影響します。例えば

.setConstraints( // only run on an unmetered network Constraint.ON_UNMETERED_NETWORK, // only run when the device is charging Constraint.DEVICE_CHARGING )

さらに、私はあなたがしていることにスケジュールされた仕事を使用しません. 融合されたロケーション プロバイダーから定期的に更新を提供する Google API クライアントを見てください。

次のように、サービスまたはアクティビティにコールバックを実装できます

public class MainActivity extends ActionBarActivity implements
        ConnectionCallbacks, OnConnectionFailedListener, LocationListener {
    ...
    @Override
    public void onLocationChanged(Location location) {
        mCurrentLocation = location;
        mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
        updateUI();
    }

    private void updateUI() {
        mLatitudeTextView.setText(String.valueOf(mCurrentLocation.getLatitude()));
        mLongitudeTextView.setText(String.valueOf(mCurrentLocation.getLongitude()));
        mLastUpdateTimeTextView.setText(mLastUpdateTime);
    }
}

ここで完全なドキュメントをチェックアウトしますが、達成しようとしていることに特化したサービスを使用すると、より一貫したエクスペリエンスが得られると思います.

https://developer.android.com/training/location/receive-location-updates.html

于 2016-11-01T09:52:04.077 に答える