web-dev-qa-db-ja.com

Android --Firebase jobdispatcher

Firebase jobdispatcherを使用してURLヒットをスケジュールし、データベースを更新するための応答を取得できるかどうかを知りたいのですが。夜に1日1回実行してほしい。これが可能かどうか誰かが知っていますか?

これを行う良い例は見つかりません。私はすでにAndroidドキュメントと https://github.com/firebase/firebase-jobdispatcher-Android#user-content-firebase-jobdispatcher- を読みました。

API 16をターゲットにしているため、Firebasejobdispatcherを使用する必要があります。

前もって感謝します。

[〜#〜]更新[〜#〜]

これは私が1日1回それをスケジュールするためにしたことです。

final int periodicity = (int) TimeUnit.HOURS.toSeconds(24);
final int toleranceInterval = (int) TimeUnit.HOURS.toSeconds(1);

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job job = dispatcher.newJobBuilder()
        .setService(UpdateTVJobService.class)
        .setTag(JOB_TAG)
        .setTrigger(Trigger.executionWindow(periodicity, periodicity + toleranceInterval))
        .setLifetime(Lifetime.FOREVER)
        .setRecurring(true)
        .setReplaceCurrent(true)
        .build();

int result = dispatcher.schedule(job);

if (result != FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS) {
    Log.d("JOB_TAG", "ERROR ON SCHEDULE");
}
13
Sol

Firebase JobDispatcherを使用して定期的なジョブをスケジュールできます。要件に応じて、URLから応答を取得し、データベースを更新するJobServiceを拡張するサービスを作成する必要があります。次に、Firebase JobDispatcherを使用してこのサービスをスケジュールできます。executionWindowで、理想的な状況でジョブを実行する最も早い時刻と最も遅い時刻を指定する必要があります。

24時間ごとにジョブをスケジュールする場合は、実行ウィンドウ(60 * 60 * 24,60 * 60 * 24 + 60)を使用できます。次に、毎晩実行する場合は、実行ウィンドウが最初は夜間にスケジュールされます。そのため、アプリのインストール時に最初にAlarmManagerを使用して夜間(1回のみ)に起動し、ジョブディスパッチャーを使用して定期的なジョブをスケジュールできますOR別の方法は、違いに基づく方法ですこれから、希望の実行時間に、夜間に実行されるjobdispatcherを使用して非再帰ジョブをスケジュールでき、そのジョブサービス内で、jobdispatcherを使用して定期ジョブをスケジュールできます。

ExecutionWindowはおおよその時間を指定します。特定のウィンドウで実行される保証はありません。ウィンドウを逃した場合、理想的な状況では、ジョブは最も早い時間に実行されます。ジョブが終了すると、次のジョブは、ジョブが最後に実行された時間から実行ウィンドウ時間を計算します。

Job myJob = dispatcher.newJobBuilder()
                    .setTag("my-unique-tag")
                    .setRecurring(true)
                    .setLifetime(Lifetime.FOREVER)
                    .setService(MyJobService.class)
                    .setTrigger(Trigger.executionWindow(60*60*24,60*60*24+60))
                    .setReplaceCurrent(false)
                    .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
                    .setConstraints(Constraint.ON_ANY_NETWORK)
                    .setExtras(myExtrasBundle)
                    .build();

dispatcher.mustSchedule(myJob);
16