2017-09-15 14 views
2

クラッシュまたはAndroidプロセスのクリーニングのために終了していない定期的なジョブはどうなりますか? 私の意見では、それを再スケジュールすることはできません。それは決して再び実行されません。Firebase 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:tag = ...を指定したジョブは既に実行中でした

FirebaseJobDispatcher.cancel()を実行しても、

提案がありますか?

+0

クラッシュの場合、catch/finallyブロックでjobFinishedを呼び出すことができます。 また、getAllPendingJobs()を試して、ジョブを見つけて新しいものをスケジュールする前にキャンセルすることもできます。 –

+0

残念ながら、 'FirebaseJobDispatcher.getAllPendingJobs()'は実装されていません。私は捕まえることができる例外を意味するものではありません。 Androidがアプリケーションをシャットダウンした場合、どうなるか。 g。メモリ不足の場合? – almisoft

答えて

0

try catchブロックにコードを挿入します。キャッチブロックコール中 jobFinished(job、true); 。 「true」は、ジョブが再スケジュールされることを意味します。

「Androidがメモリを使い果たした場合、たとえばメモリが足りない場合はどうなりますか?」この場合、osはOutOfMemmoryエラーを発生させ、try catchブロックがそれを処理します。

+0

答えを向上させるには、コードを置くことができる方が良いでしょう。 – Kalamarico

+0

もう一度:「通常の」例外がキャッチされない場合はどうなりますか?キャッチ可能な例外を投げずにAndroidがアプリをシャットダウンするとどうなりますか? – almisoft

+0

これを試すonStopJob osがジョブをキャンセルしたときに呼び出され、trueを返すとジョブが再スケジューリングされる@ @ Override public boolean onStopJob(JobParameters job){ return true; } ' –

関連する問題