9

Firebase jobdispatcherを使用してURLヒットをスケジュールし、応答を取得してdbを更新できるかどうかを知りたいと思います。 私はそれを夜に1日1回実行したいと思います。これが可能なら誰でも知っていますか?Android - Firebase jobdispatcher

私はこれを行う良い例が見つかりません。私は既にアンドロイドのドキュメントとhttps://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-を読んでいます。

は私が事前にAPI 16.

感謝をターゲットにしていますので、Firebase jobdispatcherを使用する必要があります。

UPDATE

これは私が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"); 
} 

答えて

10

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

24時間ごとにジョブをスケジュールする場合は、実行ウィンドウ(60 * 60 * 24,60 * 60 * 24 + 60)を使用できます。毎晩実行する必要がある場合は、それが最初に夜間にスケジュールされていることを確認してください。そのため、最初にAlarmManagerを使用して、アプリがインストールされ、ジョブディスパッチャーを使用して定期的なジョブをスケジュールするか、または別の方法で今からの違いに基づいて、実行時間は夜間に実行される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); 
+0

ありがとう、私は何か似たようなことをしました。私は他の人のために自分の投稿を更新します。 – Sol

+0

@Bhuvnesh Varma:トリガーウィンドウについて質問する必要がありますか? –

+0

@ young_08あなたのお問い合わせは何でもお願いします。 –

1

あなたのニーズに応じて実行ウィンドウがありトリガー繰り返しジョブを作成するJob.Builderを伝えることで、定期的なジョブをスケジュールすることができます。

+1

私は、私はすべての60秒後に私の仕事を実行するには、このスケジューラをテストしたいトリガー – blackHawk

+0

@Dougがどうなるかタスクごとに4分のスケジュールを設定します。ここに私の引き金はありますが、私はそれが60秒ごとに働いているとは思いません。 .setTrigger(Trigger.executionWindow(60,60 + 60)) –

関連する問題