クラッシュまたはAndroidプロセスのクリーニングのために終了していない定期的なジョブはどうなりますか? 私の意見では、それを再スケジュールすることはできません。それは決して再び実行されません。Firebase Jobdispatcher:エラーのために無期限に実行されるジョブは、決して再スケジュールされません。
例
public class MyJobService extends JobService {
@Override
public boolean onStartJob(JobParameters job) {
doSomeWork(job);
return true; // true = there is still work going on!
}
private void doSomeWork(final JobParameters job) {
new Thread() {
public void run() {
// do some work, maybe load data from internet
// loading...
// loading...
// app crashes or its process is killed by Android
// this piece of code is never reached!
jobFinished(job, false);
}
}.start();
}
}
あなたがコード内で見ることができるように、ジョブはクラッシュで終了することはできません。それ以降はスケジュール変更されません。
あなたはFirebaseJobDispatcher.mustSchedule()
でそれを再スケジュールしたい場合、これはlogcatに表示されます。
E/FJD。 ExternalReceiver:実行中のジョブの実行依頼を受け取りました。
W/FJD。 JobService:tag = ...を指定したジョブは既に実行中でした
FirebaseJobDispatcher.cancel()
を実行しても、
提案がありますか?
クラッシュの場合、catch/finallyブロックでjobFinishedを呼び出すことができます。 また、getAllPendingJobs()を試して、ジョブを見つけて新しいものをスケジュールする前にキャンセルすることもできます。 –
残念ながら、 'FirebaseJobDispatcher.getAllPendingJobs()'は実装されていません。私は捕まえることができる例外を意味するものではありません。 Androidがアプリケーションをシャットダウンした場合、どうなるか。 g。メモリ不足の場合? – almisoft