Firebase Jobdispatcher:由于错误而无休止地运行的作业永远不会再次安排

时间:2017-09-15 10:54:06

标签: 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 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()

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

将您的代码放入try catch块。在catch块调用中 jobFinished(job,true); 。 “真实”意味着工作将被重新安排。

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