2017-09-15 42 views
2

恰好是不是由於碰撞或Android生產清潔成品循環作業是什麼? 在我看來,它不可能重新安排它。它永遠不會再被執行。火力地堡Jobdispatcher:指由於一個錯誤不休運行的作業都不會再安排

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()

有什麼建議嗎?

+0

在崩潰,你可以調用jobFinished在catch的情況下/ finally塊。 你也可以嘗試getAllPendingJobs(),找到你的工作,並取消它之前安排一個新的。 –

+0

不幸的是,'FirebaseJobDispatcher.getAllPendingJobs()'未實現。我不是指可以被捕獲的例外。如果Android關閉應用程序會發生什麼,例如, G。在缺乏記憶的情況下? – almisoft

回答

0

代碼放在try catch塊。在catch塊中調用 jobFinished(job,true); 。 「真」意味着工作將會重新安排。

「Android是否關閉應用程序,會發生什麼,例如在缺乏內存的情況下?」 。在這種情況下,os會引發OutOfMemmory錯誤,你的try catch塊會處理它。

+0

爲了改進答案,也許如果你可以把代碼更好 – Kalamarico

+0

再次說明:如果沒有可以捕獲的「正常」異常會發生什麼?如果Android關閉應用程序而不拋出可捕獲的異常,會發生什麼情況? – almisoft

+0

試試這個onStopJob西港島線時調用OS取消作業,返回true會重新安排你的job' @覆蓋 公共布爾onStopJob(JobParameters工作){ 迴歸真實; }' –