由于崩溃或Android进程清理而未完成的定期作业会发生什么? 在我看来,不可能重新安排它。它永远不会再被执行。
示例
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()
。
有什么建议吗?
答案 0 :(得分:1)
将您的代码放入try catch块。在catch块调用中 jobFinished(job,true); 。 “真实”意味着工作将被重新安排。
“如果Android关闭应用程序会发生什么情况,例如内存不足?”在这种情况下,os会引发OutOfMemmory错误,你的try catch块会处理它。