Android 5.0 JobScheduler簡介以及在進程自拉活的應(yīng)用

前提:5.0以上,守護進程自拉活的模式已經(jīng)不可用。同時由于forceStopPackage會禁用Broadcast、Alarm,因此應(yīng)用在5.0以上的自拉活成為一個需要面臨的新課題。

目前發(fā)現(xiàn)了兩種方法可以做到在5.0以上實現(xiàn)應(yīng)用的自拉活:

NotificationListenerService:缺點:需要用戶打開開關(guān);優(yōu)點:實時性好,應(yīng)用被殺馬上拉起。

JobScheduler:下文將分析JobScheduler的實現(xiàn)原理、使用方法和優(yōu)缺點。


JobScheduler主要API介紹:

JobScheduler:API 21以上提供的系統(tǒng)服務(wù)接口,是系統(tǒng)服務(wù)JobSchedulerService的客戶端代理

http://developer.android.com/reference/android/app/job/JobScheduler.html

http://developer.android.com/samples/JobScheduler/index.html

獲?。篶ontext.getSystemService(Context.JOB_SCHEDULER_SERVICE);

JobInfo:應(yīng)用程序向JobSchedulerService發(fā)出任務(wù)請求的描述類,使用JobInfo.Builder構(gòu)建。

http://developer.android.com/reference/android/app/job/JobInfo.html

http://developer.android.com/reference/android/app/job/JobInfo.Builder.html

JobInfo.Builder主要API

設(shè)置為開機啟動的任務(wù)

設(shè)置任務(wù)執(zhí)行周期

設(shè)置重試策略

JobScheduler對于應(yīng)用自拉活的作用和方法:

通過JobScheduler將JobService注冊到系統(tǒng)中,系統(tǒng)在條件滿足時,主動bind到JobService,完成拉活。注冊的信息不會因forceStop而被清除。

為了起到及時守護的效果,目前設(shè)置了周期為3秒:每3秒系統(tǒng)就會bind/unbind一次,為了防止JobService重新實例化,在App啟動時,通過startService方法先拉起JobService,并使其STICKY。

優(yōu)點:API21以上可用,測試6.0的Nexus 5x可用,與守護進程方式一起覆蓋了4.0—6.0的機型。

缺點:受到Doze、系統(tǒng)休眠限制

Demo:https://github.com/ziruiwang/DefendService.git?

JobScheduler在系統(tǒng)中的主要結(jié)構(gòu)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容