Android 工作人员管理器:不在排队中开始工作

Android 工作人员管理器:不在排队中开始工作,android,kotlin,android-workmanager,Android,Kotlin,Android Workmanager,我有这样的代码,我需要实现任务队列,如果任务在队列中,那么您不需要添加它。 我实现了如所示的when,一切正常,但有时工作者的状态保持排队状态,并且新任务不会添加到队列中。 也就是说,当没有Internet时,我添加一个任务,当Internet出现时,任务开始用尽,但由于某种原因,有时它不会发生,我不理解为什么任务不启动,尽管Internet在那里,任务在队列中。 如何确定任务为何无法启动? 有人有更好的建议吗 //run task runOneTimeWorkByType<GetDocu

我有这样的代码,我需要实现任务队列,如果任务在队列中,那么您不需要添加它。 我实现了如所示的when,一切正常,但有时工作者的状态保持排队状态,并且新任务不会添加到队列中。 也就是说,当没有Internet时,我添加一个任务,当Internet出现时,任务开始用尽,但由于某种原因,有时它不会发生,我不理解为什么任务不启动,尽管Internet在那里,任务在队列中。 如何确定任务为何无法启动? 有人有更好的建议吗

//run task
runOneTimeWorkByType<GetDocumentsWorker>(GET_DOCUMENTS_TAG)

     private inline fun <reified W : Worker> runOneTimeWorkByType(tag: String) {
            val workerInfoList = workManager
                .getWorkInfosByTag(tag)
                .get()

            for (item in workerInfoList) {
                if (item.state == WorkInfo.State.ENQUEUED){
                    return
                }
            }

            val constraints = Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .build()

            val workRequest =
                OneTimeWorkRequestBuilder<W>()
                    .setConstraints(constraints)
                    .addTag(tag)
                    .build()

            workManager.enqueue(workRequest)
        }


        class GetDocumentsWorker(ctx: Context, workerParams: WorkerParameters) :
            Worker(ctx, workerParams) {
            @Inject
            lateinit var serviceUtils: ServiceUtils

            init {
                App.appComponent.inject(this)
            }

            override fun doWork(): Result {
                Log.d("workmng", "GetDocumentsWorker: start")
                try {
                    serviceUtils.documentsGet()
                } catch (e: Exception) {
                    Log.d("workmng", "GetDocumentsWorker:  exception", e.cause)
                    return Result.retry()
                }
                Log.d("workmng", "GetDocumentsWorker: end")
                return Result.success()
            }
        }
fun runGetDocumentsTask() {
        val workRequest =
            OneTimeWorkRequestBuilder<GetDocumentsWorker>()
                .addTag(GET_DOCUMENTS_TAG)
                .build()

        workManager.enqueue(workRequest)
    }
private var workManager: WorkManager = WorkManager.getInstance(ctx)

    init {
        //workManager.cancelAllWork()
        runSendAllPeriodicTasks()
    }

    private fun runSendAllPeriodicTasks() {
        runOneTimeWorkOnPeriod<SendAllWorker>(15, TimeUnit.MINUTES)
        runOneTimeWorkOnPeriod<FailureFilesResendWorker>(3, TimeUnit.HOURS)
        runOneTimeWorkOnPeriod<GetItemsWorker>(1, TimeUnit.HOURS)
    }