Android 12 (API 級別為 31) 引入了前臺服務啟動限制。除少部分特殊場景外,如果您的應用的 targetSdkVersion 是 Android 12 或者更高 API 級別的話,應用在后臺運行時將不能再啟動前臺服務。這意味著,如果應用當前狀態不符合后臺啟動服務的條件,調用 setForeground 時可能會拋出異常。
前臺服務啟動限制
https://developer.android.google.cn/about/versions/12/foreground-services
特殊場景
https://developer.android.google.cn/guide/components/foreground-services#background-start-restriction-exemptions
setForeground
https://developer.android.google.cn/reference/androidx/work/ListenableWorker#setForegroundAsync(androidx.work.ForegroundInfo)
異常
https://developer.android.google.cn/reference/android/app/ForegroundServiceStartNotAllowedException
因此,我們在 WorkManager 2.7 中做出了部分改進,使得應用在遵守后臺限制的同時可以輕松地安排重要任務。通過加急任務,應用可以輕松地運行耗時短且高優先級的任務,例如發送一條聊天信息或者往社交網絡上傳一張圖片。推薦使用加急任務來啟動需要立即執行且即使用戶將應用放至后臺也能繼續執行的任務。
加急任務
https://developer.android.google.cn/about/versions/12/foreground-services#expedited-jobs
如需設置加急任務,可通過 WorkRequest 的 Builder 對象調用 setExpedited() 方法:
val request = OneTimeWorkRequestBuilder《HighPriorityWorker》() .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) .build()WorkManager.getInstance(context).enqueue(request)
通過調用 setExpedited() 告訴框架該任務是重要的并且比其他任務具有更高的優先級。請注意,我們在調用 setExpedited() 方法時傳入了 OutOfQuotaPolicy 參數。加急任務受基于應用待機群組 (App Standby Buckets) 的配額限制,當您的應用嘗試在超出配額的情況下執行加急任務時,WorkManager 會根據 OutOfQuotaPolicy 參數做出相應的行為: 完全放棄加急任務請求 (DROP_WORK_REQUEST),或者將該加急任務降級至普通任務 (RUN_AS_NON_EXPEDITED_WORK_REQUEST)。加急任務很重要,但并不意味著它可以一直執行,您需要將配額視為執行加急任務的時間限制。
OutOfQuotaPolicy
https://developer.android.google.cn/reference/androidx/work/OutOfQuotaPolicy
應用待機群組 (App Standby Buckets)
https://developer.android.google.cn/topic/performance/appstandby
WorkManager 2.7 是向后兼容的,可以在 Android 12 之前的系統上運行。當在 Android 11 或之前版本的系統上調用 setExpedited() 時,WorkManager 將默認使用前臺服務代替加急任務。
想了解 WorkManager 中 setExpedited() API 的實戰,請參閱官方文檔:
WorkManager 示例
https://github.com/android/architecture-components-samples/tree/android-s/WorkManagerSample
加急任務
https://developer.android.google.cn/topic/libraries/architecture/workmanager/how-to/define-work#expedited-jobs
您可以在官方發布說明中查看 WorkManager 每個版本中變更及優化的詳細列表,以及 WorkManager 2.6 和 WorkManager 2.7 的發布說明。
WorkManager 2.6
https://developer.android.google.cn/jetpack/androidx/releases/work#2.6.0
WorkManager 2.7
https://developer.android.google.cn/jetpack/androidx/releases/work#2.7.0
責任編輯:haq
-
Android
+關注
關注
12文章
3962瀏覽量
129528 -
服務器
+關注
關注
13文章
9682瀏覽量
87269
原文標題:在 Android 12 中使用 WorkManager
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
如何在Android設備上安裝Cyusb3014芯片驅動?
如何在i.mx8mq的android13上啟用Widevine DRM?
多顯示器在運行Android Automotive 8 i.MX Automotive 13.0.0 1.1.0系統的1.1.0 EVK中無法正常工作怎么解決?
Android 16有哪些變更
如何在 樹莓派 上編寫和運行 C 語言程序?

零基礎入門:如何在樹莓派上編寫和運行Python程序?

評論