7

我注意到我的計劃JobScheduler過於頻繁地執行作業方式。我已經設定每天執行一次,它需要閒置,開啓WLAN和收費,但是當這些條件滿足時,工作每10分鐘執行一次,甚至更頻繁。當使用setPeriodic()時,Android JobScheduler運行方式太頻繁

我的代碼:

JobInfo.Builder builder = new JobInfo.Builder(1, 
        new ComponentName(context.getPackageName(), SyncJobService.class.getName())); 


builder.setPeriodic(TimeUnit.DAYS.toMillis(1)) 
     .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) 
     .setRequiresCharging(true) 
     .setRequiresDeviceIdle(true); 

int code = jobScheduler.schedule(builder.build()); 
if (code <= 0) { 
    Log.e(TAG, "Could not scheduled job: " + code); 
    return; 
} 

Log.e(TAG, "Scheduled job"); 

作業執行後臺線程從互聯網上下載數據,數據下載完成後,我打電話

mService.jobFinished(mParams, true); 

通知作業調度的工作已經完成,它應該重新安排它。即使將期限設置爲一天,工作如何頻繁執行?我的android 6.0.1設備幾乎從不進入打盹模式,因爲作業經常運行。

回答

12

數據下載完成後,我打電話給mService.jobFinished(mParams, true);通知工作已經完成的作業調度程序,它應該重新安排它

那是你的問題就在這裏。使用false,而不是true

false說,「這項工作是爲這項工作完成的」。 true表示「我們遇到了問題,請重新安排這項工作再次發生」。例如,標準說你必須有一個互聯網連接,但也許你很難連接到你的服務器。在這種情況下,請返回true,希望問題能夠清理一下。

對於那些您真的想要返回true的情況,您可能還會考慮調整退避規則via setBackoffCriteria()

+2

哦,這就解釋了我遇到的問題。好像我誤解了文檔。謝謝! – qwertz