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使用注意點
IllegalArgumentException: You're trying to build a job with no constraints, this is not allowed.
K:job必須要指定一個限制條件,如setMinimumLatency()StrictModeException or ANR
K: JobService 是直接繼承Service,和IntentService不一樣,Jobservice 運行在主線程,如果訪問網絡等耗時操作會報異常或ANR使用CancelAll會把同一UID下的所有job全部cancel
K: JobSchedulerService.this.cancelJobsForUid(uid, reason);-
JobService 服務啟動不了?
K:1. 同一個UID下,當兩個JobService對應的jobId相同時, 先注冊的任務會被后注冊的任務覆蓋掉, 只會執行后注冊的任務, 先注冊的任務被取消了- 如果JobService執行在獨立的進程, 此時應用需要自啟動權限, 相應的任務才會執行(針對于各個廠商對自啟動App管控策略有關)