JobScheduler是Android L(API21)新增的特性,用於定義知足某些條件下(電量,網絡,時間,屏幕熄/亮 ,設備是否空閒 等)執行的任務。它的宗旨是把一些不是特別緊急的任務放到更合適的時機批量處理,這樣能夠有效的節省電量。html
自 Android 5.0 發佈以來,JobScheduler 已成爲執行後臺工做的首選方式,其工做方式有利於用戶。應用能夠在安排做業的同時容許系統基於內存、電源和鏈接狀況進行優化。JobScheduler 可實現控制和簡潔性。android
schedule用法過程說明:web
一 建立繼承於JobService的對象(該service運行在主線程)網絡
1 在onStartJob中完成具體的業務邏輯app
二 建立JobInfo對象(採用builder模式),設置監放任務執行的條件(監聽電量,網絡,時間,屏幕亮/熄,設備是否空閒 等)ide
建立定時任務時,你可使用JobInfo.Builder來構建一個JobInfo對象,而後傳遞給Scheduler底層的jobSchedulerService。post
JobInfo.Builder接收兩個參數,第一個參數是你要運行的任務的標識符ID,第二個是這個JobService組件的類名。優化
1 ComponentName jobService = new ComponentName(this, MyJobService.class); //JobService組件的名包裹ui
2 JobInfo jobInfo = new JobInfo.Builder(123, jobService) //任務Id等於123this
.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()來實現。
https://www.cnblogs.com/softwarelanguagebs/p/9531562.html