【问题标题】:One time job on WorkManager not running on some devicesWorkManager 上的一次性作业未在某些设备上运行
【发布时间】:2021-08-17 19:20:32
【问题描述】:

在某些设备上使用 WorkManager 计划的作业(100 例中有 1 例)根本不会执行。我安排工作:

val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .build()
WorkManager.getInstance(applicationContext)
    .enqueueUniqueWork(SessionRecordReportingWorker.WORK_TAG, ExistingWorkPolicy.APPEND_OR_REPLACE,
            OneTimeWorkRequest.Builder(SessionRecordReportingWorker::class.java)
                    .addTag(SessionRecordReportingWorker.WORK_TAG)
                    .setConstraints(constraints)
                    .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 30, TimeUnit.SECONDS)
                    .build());

当我执行 APPEND_OR_REPLACE 时,新作业会刷新整个数据库,所以这不是问题。新作业将删除以前的作业,但会发送所有数据。使用最新稳定版workmanager库

implementation "androidx.work:work-runtime-ktx:2.5.0"

我已经向客户询问了我能想到的所有问题:后台同步是否禁用、电源优化是否开启、此应用是否开启电源优化、电池电量不足。但是,当在我的 Android 11 上进行测试时 - 一切都按预期工作。作业被执行并发送到服务器。客户端在应用程序上执行正常的 Web 请求(因此他的网络已连接),然后应使用 workmanager 报告所有重要操作的日志/记录。但是在这种情况下,它不会被执行/发送。你能指出它的潜在原因吗?

【问题讨论】:

    标签: android android-workmanager


    【解决方案1】:

    WorkManager 不可靠

    https://dontkillmyapp.com/

    基本上,你可以在这里停下来......

    除此之外,您可以通过调试 JobScheduler 来查看工作发生了什么,但因为它没有在您的环境中发生..我不知道该给您什么建议。

    https://developer.android.com/topic/libraries/architecture/workmanager/how-to/debugging

    使用 adb shell dumpsys jobscheduler

    您需要检查转储:

    • 如果当前有计划任务
    • 已执行任务的历史记录
    • 满足与不满足的约束
    • 应用备用桶
    • 网络/配额的可用毫秒数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2019-02-18
      相关资源
      最近更新 更多