繁体   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