使用Android Worker时beginUniqueWork ExistingWorkPolicy.KEEP ::如何检测随后的入队何时不开始工作

问题描述 投票:1回答:1

我当前的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()

我的用户可以尝试多次启动这项工作,但是当我将beginUniqueWorkExistingWorkPolicy.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?

我当前的Android应用程序使用archWorkerRuntimeVersion ='2.3.0-beta02'api“ androidx.work:work-runtime:$archWorkerRuntimeVersion” api“ androidx.work:work-runtime-ktx:$ ...

android android-workmanager
1个回答
0
投票
如果某些具有相同uniqueWorkName的uniqueWork已在运行且未成功,则您的方法将不会添加观察者。>>

假设我有如下所示的demo()方法,而UploadWorker除了等待10秒外什么也不做:

© www.soinside.com 2019 - 2024. All rights reserved.