簡體   English   中英

Android 12加急工作通知

[英]Android 12 expedited job notification

將手機升級到 Android 12 后,我開始在加急工作中出現一些意外行為。 那是我的代碼:

val workRequest = OneTimeWorkRequestBuilder<UploadWorker>()
    .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
    .build()

WorkManager.getInstance(context).enqueueUniqueWork(UNIQUE_WORK_NAME, ExistingWorkPolicy.REPLACE, workRequest)

而且我還覆蓋了getForegroundInfo()以返回ForegroundInfo實例。

在 Android < 12 上,我的工作工作正常:它運行時間很長,當它開始時,通知顯示在通知樹中,並且工作完成。

現在,使用 Android 12 我看不到任何通知圖標,如果我關閉屏幕,則作業會在一分鍾內被取消 並立即重新啟動。

如果我在doWork()方法中顯式調用setForeground() (我不知道有什么區別),它會稍微改變行為:通知開始顯示(由於某種原因不是立即顯示)但它會在一段時間后消失,當作業仍在運行時。 作業本身不會被取消。

這是什么意思呢? 我做錯了嗎? 我想要的只是通過通知啟動長期運行的加急工作。

您是否在 Worker class 中覆蓋了getForegroundInfo() 根據文檔

如果您想請求任務作為加急作業運行,任何 ListenableWorker 都必須實現 getForegroundInfo 方法

如果我在 doWork() 方法中顯式調用 setForeground() (我不知道有什么區別),它會稍微改變行為:

https://developer.android.com/topic/libraries/architecture/workmanager/advanced/long-running

ListenableWorker 現在支持 setForegroundAsync() API,CoroutineWorker 支持暫停 setForeground() API。 這些 API 允許開發人員指定此 WorkRequest 是重要的(從用戶的角度來看)還是長期運行的。

在 Android < 12 上,我的工作工作正常:它運行時間很長,當它開始時,通知顯示在通知樹中,並且工作完成。

為了保持加急作業的向后兼容性,WorkManager可能會在早於 Android 12 的平台版本上運行前台服務。前台服務可以向用戶顯示通知。

以 Android 12 或更高版本為目標時,您可以通過相應的 setForeground 方法使用前台服務。

https://developer.android.com/topic/libraries/architecture/workmanager/how-to/define-work#worker https://developer.android.com/static/images/guide/background/workmanager_main.svg

工人們不知道他們正在做的工作是否加急。 但是當 WorkRequest 被加速時,工作人員可以在 Android 的某些版本上顯示通知

為此,WorkManager 提供了 getForegroundInfoAsync() 方法,您必須實現該方法,以便 WorkManager 可以在必要時為您顯示啟動 ForegroundService 的通知。

長話短說-有很多可能,可以等等。您需要做的是調試 JobScheduler 並弄清楚到底發生了什么,然后嘗試找出原因。

https://developer.android.com/topic/libraries/architecture/workmanager/how-to/debugging#use-alb-shell0dumpsys-jobscheduler

  • 檢查確切的約束是否滿足。
  • 您的配額和互聯網使用量是多少(您有一個以毫秒為單位的數量)
  • 您的 PowerBucket 是什么(您可能會要求用戶免除您的電池優化)
  • 已執行作業的歷史

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM