Android Firebase Jobdispatcher:由于错误而无休止地运行的作业将不再计划
由于崩溃或Android进程清理而未完成的重复作业会发生什么情况? 依我看,不可能重新安排。它再也不会被执行了 示例Android Firebase Jobdispatcher:由于错误而无休止地运行的作业将不再计划,android,firebase,firebase-job-dispatcher,Android,Firebase,Firebase Job Dispatcher,由于崩溃或Android进程清理而未完成的重复作业会发生什么情况? 依我看,不可能重新安排。它再也不会被执行了 示例 public class MyJobService extends JobService { @Override public boolean onStartJob(JobParameters job) { doSomeWork(job); return true; // true = there is still
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:标记为的作业=。。。已经在运行了
即使之前运行了FirebaseJobDispatcher.cancel()
有什么建议吗?将代码放入try-catch块。在catch块调用中 作业已完成(作业,正确)。“true”表示作业将被重新安排
“如果Android关闭应用程序会发生什么情况,例如内存不足?”。在这种情况下,操作系统将引发OutOfMemory错误,您的try-catch块将处理该错误。如果发生崩溃,您可以在catch/finally块中调用jobFinished。您也可以尝试getAllPendingJobs(),找到您的作业并在计划新作业之前取消它。遗憾的是,“FirebaseJobDispatcher.getAllPendingJobs()”未实现。我不是说可以抓住的例外。如果Android关闭应用程序,会发生什么。G在内存不足的情况下?为了改进答案,如果你能把代码放在更好的位置。增益:如果没有可以捕获的“正常”异常,会发生什么?如果Android关闭应用程序而不抛出可捕获的异常,会发生什么情况?尝试此onStopJob将在操作系统取消作业时调用,返回true将重新安排作业
@覆盖公共布尔onStopJob(JobParameters job){return true;}
是否确定始终调用onStopJob
?例如,当设备的电池耗尽时,不调用它!?BatteryStatus应该由您来处理。