web-dev-qa-db-ja.com

Firebase JobDispatcher-以前のAPI(JobSchedulerおよびGcmTaskService)と比較してどのように機能しますか?

バックグラウンド

Googleには、JobSchedulerGcmTaskServiceなどのジョブ/タスクスケジューリング用の複数のソリューションがあります。それぞれに長所と短所があります。

最近、Googleは「Firebase JobDispatcher」という新しいライブラリを発表しました。

問題

悲しいことに、この新しいAPIについて読むべきものはほとんどありません。実際、それについて何かを見つけるのは本当に難しいです。

私が見つけたのは、彼らの 発表ビデオサンプル だけです。しかし、彼らでさえ、このAPIについて知ることはあまりありません。

質問

以前の質問、調査、他のAPI( here など)との比較を見て、新しいAPIがどのように機能するかを尋ね、それを使用するときに考慮すべきことを知りたいと思います。

  1. ジョブにパラメータを保持して、必要に応じて変更することもできますか?サンプルでは、​​「ユーザー指定の追加のオプションバンドル。デフォルトは空のバンドルです。」ですか?ジョブの実行時にジョブによって変更できますか?

  2. ジョブを簡単に再スケジュールできますか? 「ジョブを繰り返すかどうかを示すブール値」と言われています。スケジュールを変更するタイミングはどのように選択できますか?サンプルを試し、「繰り返し」を選択しましたが、再度実行されることはなく、1回だけ実行されるようです。

  3. ライブラリのジョブに対して保護できますか(一意のIDのため)?

  4. (以前のAPIが行ったように)アプリを更新するとき、特別な注意が必要ですか?アプリの更新後もジョブをスケジュールできますか?サンプルのテストでは、アプリの更新後にジョブが完全になくなっているようです。回避できますか?

  5. デバイスを再起動した場合でもジョブをスケジュールしたい場合、RECEIVE_BOOT_COMPLETEDが必要ですか?サンプルにはそれがあるようです。

  6. スケジュールされたすべてのジョブとその情報(パラメーターを含む)のリストを取得し、それらの特定/すべてをキャンセルしたり、変更することさえできますか?

  7. アプリのデータのクリア操作でジョブが削除されますか?

  8. 時間範囲内で実行するのが最適であるとジョブに伝えることは可能ですか(例:午前7時から8時の間)。 「ExecutionWindowTrigger-これは、ジョブを実行する時間枠を指定します」と記載されています。それですか?このウィンドウを見逃した場合はどうなりますか?

  9. onStartJobクラスのメソッドJobServiceはブール値を返し、その説明は「残りの作業があるかどうか」です。" どういう意味ですか? needsRescheduleメソッドのjobFinishedパラメーターはどういう意味ですか?それらは互いに関連していますか?

  10. 知っておくべき制限はありますか?たとえば、各関数の最小値と最大値は?

69

実際にFirebase Android JobDispatcherはAndroidのジョブスケジューリングエンジンを取り巻く抽象化のレイヤーです。現時点では、GCM Network Managerのドライバー実装は1つだけです。つまり、現在と同じように動作します。 GCM Network Managerの動作 。将来的には、より多くのドライバーが実装されることを願っています。

1。ジョブにパラメータを保持して、必要に応じて変更することもできますか?サンプルでは、​​「ユーザーが提供する追加のオプションバンドル。デフォルトは空のバンドルです」と述べています。 。これでしょうか?ジョブの実行時にジョブによって変更できますか?

  1. はい、_Job.Builder_にはメソッドsetExtrasがあり、jobParameters.getExtras()を介して後でアクセスできる任意のバンドルがあります。バンドルを変更することはできません(jobParametersにはゲッターのみが含まれます)。フラグsetReplaceCurrent(true)を使用してジョブのスケジュールを変更し、新しいバンドルを指定できます。

2。ジョブを簡単に再スケジュールできますか? 「ジョブを繰り返すかどうかを示すブール値」と呼ばれます。スケジュールを変更するタイミングはどのように選択できますか?サンプルを試し、「繰り返し」を選択しましたが、再度実行されることはなく、1回だけです。

  1. ジョブを再スケジュールするには、setRecurring(true)setTrigger(Trigger.executionWindow(10, 20))を指定する必要があります

これは、ウィンドウの開始期限に達するとすぐにトリガーされ、ドライバーはウィンドウの終了前にジョブを実行することをお勧めします。

3。ライブラリのジョブに対して保護できますか(一意のIDのため)?

  1. ジョブタグは、アプリケーション内で一意である必要があります。電話の他のアプリには、独自の「エンドポイント」(パッケージ名/サービス名)があります。 GooglePlayDriverのすべてのスケジュール済み/終了したジョブを表示するには

    _adb Shell dumpsys activity service GcmService_

4。 (以前のAPIが行ったように)アプリを更新するとき、特別な注意が必要ですか?アプリの更新後もジョブをスケジュールできますか?サンプルのテストでは、アプリの更新後にジョブが完全になくなっているようです。回避できますか?

  1. GCM Network Managerに関しては、GooglePlayDriverは、Google Play開発者サービスまたはアプリが更新された後、ジョブのスケジュールを変更しません。これが 未解決の問題 です。したがって、今のところこれはあなたの責任です。

5。デバイスを再起動してもジョブをスケジュールしたい場合、RECEIVE_BOOT_COMPLETEDが必要ですか?サンプルにはそれがあるようです

  1. はい、そのような許可が必要です。 Builderには、動作を制御するパラメーターがあります:setLifetime(Lifetime.FOREVER | UNTIL_NEXT_BOOT)もちろん、独自のドライバーを作成する場合は、自分で寿命を管理する必要があります。

6。スケジュールされたすべてのジョブとその情報(パラメーターを含む)のリストを取得し、それらの特定/すべてをキャンセルし、さらに変更することもできますか?

  1. いいえ、GCM Network Managerと同じです。しかし、サービスをプレイするようにスケジュールしながら、なんとか自分ですべてのジョブを追跡できます。

7。アプリのデータのクリア操作でジョブが削除されますか?

  1. はい、ジョブは削除されます。おそらく以前のバージョンのGoogle Playサービスでは、動作が異なりました。

8。時間範囲内で実行するのが最適であるとジョブに伝えることは可能ですか(例:午前7:00から8:00まで)。 「ExecutionWindowTrigger-ジョブを実行する時間枠を指定します」と記載されています。それですか?このウィンドウを見逃した場合はどうなりますか?

  1. さて、アラームを7:00に起動するように設定し、executionWindow(0, 60*60)を使用して非定期的なジョブをスケジュールできます。ジョブは7:00-8:00の間に実行されます。
    次の理由で定期ジョブを使用できません

    windowStart-ジョブが実行に適格と見なされる最も早い時間(秒単位)。ジョブがスケジュールされたとき(新しいジョブの場合)または最後の実行(定期的なジョブの場合)から計算されます。

また、ExecutionWindowTriggerはおおよその時間を指定します。指定されたウィンドウで実行される保証はありません。ウィンドウが表示されない場合、ジョブはいつでも実行されます。

9。 「JobService」クラスのメソッド「onStartJob」はブール値を返し、その説明は「さらに作業が残っているかどうか」です。 。どういう意味ですか? 「jobFinished」メソッドの「needsReschedule」パラメーターの意味は何ですか?それらは互いに関連していますか?

  1. onStartJobがfalseを返す場合、作業が完了したことを意味します。 jobFinishedを呼び出す必要はありません。 _RESULT_SUCCESS_は自動的に送信されます。

onStartJobがtrueを返す場合、スレッドを開始して結果を待っていることを意味します。完了したら、jobFinishedを呼び出して、ジョブを再スケジュールするかどうかをGoogle Playサービスに通知する必要があります。はいの場合、ジョブはRetryStrategyに応じて再スケジュールされます。

10。知っておくべき制限はありますか?たとえば、各関数の最小値と最大値は?

    • onStartJobは、できるだけ早く別の実行スレッドに作業をオフロードする必要があります。彼らはあなたから期待されるものの例としてSimpleJobServiceを提供します。
    • LollipopのJobScheduler用のドライバー実装はありません。また、Google Playサービスが利用できない場合の状況を処理する必要があります。おそらく、Driverに基づいてAlarmManagerを実装する必要があります。
99
Flavio