2

由于崩溃或 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: 标签 = ... 的作业已经在运行

即使你FirebaseJobDispatcher.cancel()之前跑过。

有什么建议么?

4

1 回答 1

1

将您的代码放入 try catch 块中。在 catch 块中调用 jobFinished(job, true); . “真”表示作业将被重新安排。

“如果 Android 关闭应用程序会发生什么,例如在内存不足的情况下?” .在这种情况下,os 将引发 OutOfMemory 错误,而您的 try catch 块将处理它。

于 2017-09-28T12:27:37.987 回答