Моя текущая Android Приложение использует
archWorkerRuntimeVersion = '2.3.0-beta02'
api "androidx.work:work-runtime:$archWorkerRuntimeVersion"
api "androidx.work:work-runtime-ktx:$archWorkerRuntimeVersion"
Я начинаю работу как OneTimeRequests следующим образом: -
val initialWorkerRequest = OneTimeWorkRequest.Builder(InitialWorker::class.java).addTag(NUMERIC_WORK_IN_PROGRESS_TAG + "${System.nanoTime()}").build()
val taskOneWorkerRequest = OneTimeWorkRequest.Builder(TaskOneWorker::class.java).addTag(NUMERIC_WORK_IN_PROGRESS_TAG + "${System.nanoTime()}").build()
val taskTwoWorkerRequest = OneTimeWorkRequest.Builder(TaskTwoWorker::class.java).addTag(NUMERIC_WORK_IN_PROGRESS_TAG + "${System.nanoTime()}").build()
val taskThreeWorkerRequest = OneTimeWorkRequest.Builder(TaskThreeWorker::class.java).addTag(NUMERIC_WORK_IN_PROGRESS_TAG + "${System.nanoTime()}").build()
val taskFourWorkerRequest = OneTimeWorkRequest.Builder(TaskFourWorker::class.java).addTag(NUMERIC_WORK_IN_PROGRESS_TAG + "${System.nanoTime()}").build()
val finalWorkerRequest = OneTimeWorkRequest.Builder(FinalWorker::class.java).addTag(NUMERIC_WORK_IN_PROGRESS_TAG + "${System.nanoTime()}").build()
WorkManager.getInstance(applicationContext)
.beginUniqueWork(NUMERIC_UNIQUE_WORK_NAME, ExistingWorkPolicy.KEEP, initialWorkerRequest)
.then(listOf(taskOneWorkerRequest, taskTwoWorkerRequest))
.then(taskThreeWorkerRequest)
.then(taskFourWorkerRequest)
.then(finalWorkerRequest)
.enqueue()
Мои пользователи могут пытаться запустить эту работу несколько раз, однако как Я использую beginUniqueWork
с ExistingWorkPolicy.KEEP
, только один экземпляр работы запущен.
Я наблюдаю за работником через LiveData для ID следующим образом:
WorkManager.getInstance(applicationContext).getWorkInfoByIdLiveData(initialWorkerRequest.id).apply {
observeForever { workInfo ->
if (workInfo != null && workInfo.state == WorkInfo.State.ENQUEUED) {
...
}
}
}
При таком подходе добавляется наблюдатель каждый раз, когда мой пользователь пытается начать работу, даже если на самом деле работа не началась
1). Is this an issue?
2). Is there any way I can detect when using `beginUniqueWork` with `ExistingWorkPolicy.KEEP` does not result in work being started?