Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase Jobdispatcher:由于错误而无休止地运行的作业将不再计划_Android_Firebase_Firebase Job Dispatcher - Fatal编程技术网

Android Firebase Jobdispatcher:由于错误而无休止地运行的作业将不再计划

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

由于崩溃或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()


有什么建议吗?

将代码放入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应该由您来处理。