gpt4 book ai didi

android - 使用 enqueueUniquePeriodicWork 的 PeriodicWork 不起作用

转载 作者:行者123 更新时间:2023-12-03 14:56:03 30 4
gpt4 key购买 nike

我正在尝试通过创建一个每 5 天重复一次的定期 Worker 来使用 WorkManger。

我在华为 Android 7 设备 (API 24) 上使用 1.0.0 版 workmanagers

android.arch.work:work-runtime:1.0.0

这是代码:
fun schedule() {
val constraints: Constraints = Constraints.Builder().apply {
setRequiredNetworkType(NetworkType.CONNECTED)
}.build()

val request = PeriodicWorkRequest
.Builder(MyWorker::class.java, 5, TimeUnit.DAYS)
.setConstraints(constraints)
.build()

WorkManager.getInstance()
.enqueueUniquePeriodicWork(MyWorker.TAG, ExistingPeriodicWorkPolicy.KEEP, request)
}

我的 worker :
class MyWorker(appContext: Context, workerParams: WorkerParameters)
: Worker(appContext, workerParams) {

override fun doWork(): Result {
return try {
Thread.sleep(5000)
Timber.i("success")
Result.success()
} catch (e: Exception) {
Timber.e(e, "error")
Result.failure()
}
}

方法 schedule()onCreate() 中调用MainActivity 的。

当我第一次安装应用程序时,Worker 只运行一次。同样在日志中我看到这个错误: CancellationException task was canceled
我究竟做错了什么?
谢谢。

最佳答案

第一步是使用最新的 WorkManager 版本,因为您似乎仍在使用一个非常旧的版本:
https://developer.android.com/jetpack/androidx/releases/work
通过查看您的代码,您不太可能超过工作时间限制,大约为 10 分钟。 From the documentation ,取消作品的一些原因是:

  • 您明确要求取消它(通过调用
    WorkManager.cancelWorkById(UUID),例如)。
  • 如果是
    独特的工作,您明确地将新的 WorkRequest 与
    REPLACE 的现有工作策略。旧的 WorkRequest 立即
    视为取消。
  • 不再满足您工作的限制条件。
  • 系统指示您的应用因某种原因停止工作。如果您超过 10 分钟的执行期限,就会发生这种情况。该工作计划稍后重试。

  • 也就是说, 他们之间的几家制造商华为 , 实现非常激进的应用程序杀戮,除非最近打开了应用程序,否则它甚至不尊重调度:
    https://issuetracker.google.com/issues/122098785
    https://issuetracker.google.com/issues/122098785#comment41
    https://issuetracker.google.com/issues/122098785#comment74

    关于android - 使用 enqueueUniquePeriodicWork 的 PeriodicWork 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512889/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com