JobScheduler是Android L(API21)新增的特性,用於定義滿足某些條件下(電量,網絡,時間,屏幕熄/亮 ,設備是否空閑 等)執行的任務。它的宗旨是把一些不是特別緊急的任務放到更合適的時機批量處理,這樣可以有效的節省電量。
自 Android 5.0 發布以來,JobScheduler 已成為執行后台工作的首選方式,其工作方式有利於用戶。應用可以在安排作業的同時允許系統基於內存、電源和連接情況進行優化。JobScheduler 可實現控制和簡潔性。
schedule用法過程說明:
一 創建繼承於JobService的對象(該service運行在主線程)
1 在onStartJob中完成具體的業務邏輯
2 當系統接收到一個取消請求時,系統會調用onStopJob方法取消正在等待執行的任務
二 創建JobInfo對象(采用builder模式),設置監聽任務執行的條件(監聽電量,網絡,時間,屏幕亮/熄,設備是否空閑 等)
創建定時任務時,你可以使用JobInfo.Builder來構建一個JobInfo對象,然后傳遞給Scheduler底層的jobSchedulerService。
JobInfo.Builder接收兩個參數,第一個參數是你要運行的任務的標識符ID,第二個是這個JobService組件的類名。
1 ComponentName jobService = new ComponentName(this, MyJobService.class); //JobService組件的名包裹
2 JobInfo jobInfo = new JobInfo.Builder(123, jobService) //任務Id等於123
.setMinimumLatency(5000)// 任務最少延遲時間
.setOverrideDeadline(60000)// 任務deadline,當到期沒達到指定條件也會開始執行
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)// 網絡條件,默認值NETWORK_TYPE_NONE
.setRequiresCharging(true)// 是否充電
.setRequiresDeviceIdle(false)// 設備是否空閑
.setPersisted(true) //設備重啟后是否繼續執行
.setBackoffCriteria(3000,JobInfo.BACKOFF_POLICY_LINEAR) //設置退避/重試策略
.build();
三 先獲取JobScheduler調度器的代理對象(要理解這個過程,那么就需要先看看JobSchedulerService的啟動過程)
JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
1 對象里面主要有schedule(jobinfo對象執行條件) 啟動:
scheduler.schedule(jobInfo);
2 有cancel(job任務id) 取消:
scheduler.cancel(123); //取消jobId=123的任務
scheduler.cancelAll(); //取消當前uid下的所有任務
JobScheduler是個系統Service,我們的將自己的JobInfo傳給它,由系統負責調用,其中這個schedule方法會返回一個整型。如果schedule方法失敗了,它會返回一個小於0的錯誤碼。否則它會我們在JobInfo.Builder中定義的標識id。
如果你的應用想停止某個任務,你可以調用JobScheduler對象的cancel(int jobId)來實現;如果你想取消所有的任務,你可以調用JobScheduler對象的cancelAll()來實現。
JobScheduler調度器過程(JobSchedulerService的啟動過程)
https://www.cnblogs.com/softwarelanguagebs/p/9531562.html