gpt4 book ai didi

android - workmanager 多次重复 doWork()

转载 作者:行者123 更新时间:2023-12-05 05:44:53 26 4
gpt4 key购买 nike

这个问题已经以不同的形式被问过很多次,但我没有回答正确,想知道它是否可能不是一个 android 错误。

设置 WorkManager 后,doWork() 会随机调用,有时会连续调用多达 10 次以上。

  • 它在我的 MainApplication 中只被调用一次(*见下文)
  • 如果它被意外调用,我会尝试清除并重新启动它
  • 我已经卸载并重新安装了应用
  • 我在调用 WorkManager 之前清除所有实例
  • 我试过用一个独特的标签创建它

The expected behaviour is a call once every 10-15 minutes

详情请见下方:使用 Android studio Bumblebee 2021.1.1 Patch 2 在 LG K22 上实现

Gradle 实现:

implementation 'androidx.work:work-runtime-ktx:2.7.1'

主要 Activity 代码:

    WorkManager.getInstance(this).cancelAllWorkByTag("scanDevices")
val myMonitorWorkerRequest = PeriodicWorkRequest.Builder(myMonitorWorker::class.java,
15, TimeUnit.MINUTES,5, TimeUnit.MINUTES).build()

WorkManager.getInstance(this)
.enqueueUniquePeriodicWork(
"scanDevices",
ExistingPeriodicWorkPolicy.KEEP,
myMonitorWorkerRequest)
  • 注意:ExistingPeriodicWorkPolicy.REPLACE 不会更改此处的行为

原始 worker 类(Class):

  override fun doWork(): Result {
try{
runNotificationService()
return Result.success()
}
catch (e:Exception){
return Result.failure()
}
}

当前 worker 类(Class):

  override fun doWork(): Result {
try{
val timeNow = System.currentTimeMillis()
if(timeNow < lastTime+600000){
WorkManager.getInstance(theContext).cancelAllWorkByTag("scanDevices")
val myMonitorWorkerRequest = PeriodicWorkRequest.Builder(myMonitorWorker::class.java,
15, TimeUnit.MINUTES,5, TimeUnit.MINUTES).build()

WorkManager.getInstance(theContext)
.enqueueUniquePeriodicWork(
"scanDevices",
ExistingPeriodicWorkPolicy.KEEP,
myMonitorWorkerRequest)
}
else{
runNotificationService()
lastTime = timeNow
}
return Result.success()
}
catch (e:Exception){
return Result.failure()
}
}

上面的代码还不是万无一失的,因为有时会如此快速地连续调用工作类,以至于多个(实例/线程(我认为))同时启动并且全局变量的更新尚未生效但在另一个实例开始之前。它确实大大减少了调用次数,尽管只有一两个额外的实例漏掉了。

具体来说,我的问题是,是否有人知道我正在做的事情是否有误,或者是否存在针对正在创建的多个工作实例/线程的已知错误报告?

查看这些我尝试过但没有用的类似引用资料:

WorkManager executing enqueueUniquePeriodicWork() multiple times at once?

doWork() for WorkManager called multiple times for OneTimeWorkRequest

*App Inspection 显示在 android studio 上排队的 20 个实例

最佳答案

我不知 Prop 体原因,但我今天遇到了同样的问题,这让我非常沮丧。所以我决定卸载该应用程序,它神奇地起作用了。希望你也是这样

关于android - workmanager 多次重复 doWork(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71527194/

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