Руководитель работ повторяет doWork() несколько разAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Руководитель работ повторяет doWork() несколько раз

Сообщение Anonymous »


Этот вопрос задавался много раз в разных формах, но я не понял его правильно и задаюсь вопросом, не является ли это ошибкой Android.
После настройки WorkManager doWork() вызывается в случайное время, а иногда и до 10+ раз подряд.
  • Он вызывается только один раз в моем MainApplication (*см. пункт ниже)
    Если оно вызывается неожиданно, я пытаюсь очистить и перезапустить его.
  • Я удалил и переустановил приложение.
  • Я удаляю все экземпляры перед вызовом WorkManager
  • Я пробовал создать его с уникальным тегом
Ожидаемое поведение — звонок раз в 10–15 минут.

Подробности см. ниже:
Реализовано на LG K22 с использованием Студия Android Bumblebee 2021.1.1, патч 2
Реализация Gradle:

Код: Выделить всё

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

Код: Выделить всё

    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
Original Worker Class:

Код: Выделить всё

  override fun doWork(): Result {
try{
runNotificationService()
return Result.success()
}
catch (e:Exception){
return Result.failure()
}
}
Current 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()
}
}
The above code is not bulletproof yet since the worker class is called in such rapid succession sometimes, that multiple (instances / threads (I think)) are started at the same time and the updating of the global variables had not taken effect yet prior to another instance starting. It does dramatically reduce the number of calls though to only one or two additional instances slipping through.
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Руководитель, чтобы запечатлеть все между повторной группой захвата [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Руководитель для C ++ Class Sanger
    Anonymous » » в форуме C++
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Руководитель поиска точного слова на Java
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Руководитель получает данные между кронштейнами
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • QT передает данные между потоками, рабочая функция doWork() не запускается
    Anonymous » » в форуме C++
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»