Этот вопрос задавался много раз в разных формах, но я не понял его правильно и задаюсь вопросом, не является ли это ошибкой Android.
После настройки WorkManager doWork() вызывается в случайное время, а иногда и до 10+ раз подряд.
- Он вызывается только один раз в моем MainApplication (*см. пункт ниже)
Если оно вызывается неожиданно, я пытаюсь очистить и перезапустить его. - Я удалил и переустановил приложение.
- Я удаляю все экземпляры перед вызовом WorkManager
- Я пробовал создать его с уникальным тегом
Подробности см. ниже:
Реализовано на LG K22 с использованием Студия Android Bumblebee 2021.1.1, патч 2
Реализация Gradle:
Код: Выделить всё
implementation 'androidx.work:work-runtime-ktx:2.7.1'
Код: Выделить всё
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)
- note: ExistingPeriodicWorkPolicy.REPLACE does not change the behavior here
Код: Выделить всё
override fun doWork(): Result {
try{
runNotificationService()
return Result.success()
}
catch (e:Exception){
return Result.failure()
}
}
Код: Выделить всё
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()
}
}
Specifically, my question is, does anyone know if anything I am doing is either wrong or alternatively if there is a known bug report for multiple worker instances/threads being created?
See these similar references that I have tried but did not work:
WorkManager executing enqueueUniquePeriodicWork() multiple times at once?
doWork() for WorkManager called multiple times for OneTimeWorkRequest
*App Inspection shows 20 instances enqueued on android studio
Источник: https://stackoverflow.com/questions/715 ... iple-times