6

最初の JobService を実装しようとしています。への呼び出しonStartJobが実質的に保証されていることを理解しています (はい、有効期限なしで法外な要件を指定すると、いくつかのエッジがあります)。しかし、どうonStopJobですか?呼び出されることは保証されていますか?

具体的には、バックグラウンドで実行されるジョブがあります。しかし、いつジョブが完了したかを知る方法があります (例: sharedPrefs)。onStopJob が呼び出されて、ジョブが完了したという通知をユーザーに送信するときに頼りたいと思っていました。

注: onStopJob は通知を送信するのに便利な場所です。再試行する必要があるかどうかを知るためにジョブが完了したかどうかを既に確認しているためです。

ps 役立つかもしれない考慮事項 (私もそれを検討しています): myonStartJobが true を返した場合、システムは、呼び出されない限り、ジョブの実行が停止したことをどのように認識しますonStopJobか?

4

3 に答える 3

8

状況:

(1)onStartJob() は false を返します。
(2)onStartJob()がfalseを返した後、システムがキャンセル要求を受信した
。onStartJob() が true を返した直後。
(4)onStartJob() は true を返し、要件を満たしていません。
(5) onStartJob() が true を返した後、jobScheduler.cancelAll() を呼び出します。

注意:
onStopJob() は、jobFinished() を呼び出す前にジョブの実行を停止する必要があるとシステムが判断した場合に呼び出されます。

説明:
(1)(2)(3) onStartJob() で false を返すか、jobFinished() を呼び出してジョブが完了したことをシステムに通知した場合、システムはジョブに対して onStopJob() を呼び出しません。に。

(4) システムは onStopJob() を呼び出しますが、要件が満たされていない場合、おそらく 1 分ほど時間がかかります (Xiaomi 4c でのテスト)。

(5) システムが onStopJob() を呼び出します。

あなたの質問:
(1)how does the system know when my job stops running unless it calls onStopJob? jobFinished() を呼び出すか、onStartJob() で false を返すことで、ジョブが完了したことをシステムに知らせることができます。

(2)Is it guaranteed to be called? 状況によって異なります。そのため、 onStopJob() に依存してジョブが完了したことを判断するのは正しくありません。

于 2016-12-15T15:41:27.927 に答える
4

ドキュメントによると、 onStopJob は、システムがジョブが終了する前に強制的に停止することを決定したときに呼び出されます。この API を使用してニーズを満たすことはできません。

ジョブが終了したら、完了信号としてブロードキャスト メッセージを送信することをお勧めします。

于 2016-07-02T11:46:52.153 に答える