【Android P】 JobScheduler服務源碼解析(三)—— 使用Job需要注意的點

Android Job 服務在系統中算是一個比較輕量級的服務,但是推出后,被很多應用運用進去了
前面兩篇主要是解析Job 是怎么使用的。并且其原理如何。本篇著重于應用調試,這里會對自己使用Job 中遇到的坑,以及小技巧分享一下

調試知識擴展

adb shell cmd jobscheduler run -f -u 0 com.google.android.apps.turbo 106
// 強制執行google turbo 包下的JobID 為106的Job

adb shell cmd jobscheduler get-job-state -u 0 com.google.android.apps.turbo 106
//獲取當前turbo jobID 為106 狀態

adb shell cmd jobscheduler // 終端操作幫助文檔

adb shell dumpsys jobscheduler pkgname // 查看當前包下面所有的job信息以及狀態

adb shell dumpsys jobscheduler package com.android.phone // 查看com.android.phone 包下所有的job信息

Job使用注意點

  1. IllegalArgumentException: You're trying to build a job with no constraints, this is not allowed.
    K:job必須要指定一個限制條件,如setMinimumLatency()

  2. StrictModeException or ANR
    K: JobService 是直接繼承Service,和IntentService不一樣,Jobservice 運行在主線程,如果訪問網絡等耗時操作會報異常或ANR

  3. 使用CancelAll會把同一UID下的所有job全部cancel
    K: JobSchedulerService.this.cancelJobsForUid(uid, reason);

  4. JobService 服務啟動不了?
    K:1. 同一個UID下,當兩個JobService對應的jobId相同時, 先注冊的任務會被后注冊的任務覆蓋掉, 只會執行后注冊的任務, 先注冊的任務被取消了

    1. 如果JobService執行在獨立的進程, 此時應用需要自啟動權限, 相應的任務才會執行(針對于各個廠商對自啟動App管控策略有關)
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容