JobScheduler android任務調度處理組件(相似QuartZ) JobScheduler調度器過程(JobSchedulerService的啓動過程)

JobScheduler是Android L(API21)新增的特性,用於定義知足某些條件下(電量,網絡,時間,屏幕熄/亮 ,設備是否空閒 等)執行的任務。它的宗旨是把一些不是特別緊急的任務放到更合適的時機批量處理,這樣能夠有效的節省電量。html

自 Android 5.0 發佈以來,JobScheduler 已成爲執行後臺工做的首選方式,其工做方式有利於用戶。應用能夠在安排做業的同時容許系統基於內存、電源和鏈接狀況進行優化。JobScheduler 可實現控制和簡潔性。android

 

schedule用法過程說明:web

一   建立繼承於JobService的對象(該service運行在主線程網絡

     public class MyJobService extends JobService {
     @Override
     public boolean onStartJob(JobParameters params)
     { return false; }
 
    @Override
    public boolean onStopJob(JobParameters params)
    { return false; }
    }

     1  在onStartJob中完成具體的業務邏輯app

     當任務開始時會執行 onStartJob方法,由於這是系統用來觸發已經被執行的任務。這個方法返回一個boolean值。若是返回值是false,系統假設這個方法返回時任務已經執行完畢。若是返回值是true,那麼系統假定這個任務正要被執行。當任務執行完畢時你須要調用 jobFinished來通知系統。


     2   當系統接收到一個取消請求時,系統會調用onStopJob方法取消正在等待執行的任務
其實onStopJobjobFinished正常調用結束一個job時,也是不會調用的,只有在該job沒有被執行完,就被cancel掉的時候回調到,好比某個job尚未執行就被JobSchedulerCancel掉時,或者在某個運行條件不知足時,好比原來在Wifi環境容許的某個任務,執行過程當中切換到了非Wifi場景,那也會調用該方法。改方法也返回一個boolean值,返回true表示會從新放到JobSchedulerreScheduler,false表示直接忽略。

 

 

二  建立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()來實現。



 

JobScheduler調度器過程(JobSchedulerService的啓動過程)

https://www.cnblogs.com/softwarelanguagebs/p/9531562.html

相關文章
相關標籤/搜索