Mhe*_*rsh 6 android kotlin android-workmanager
我有这样的代码,我需要实现任务队列,如果任务在队列中,那么你不需要添加它。\n我实现如图所示,一切正常,但有时工作人员的状态保持ENQUEUED ,并且新的任务不会添加到队列中。\n也就是说,当没有互联网时,我添加一个任务,当互联网出现时,任务开始耗尽,但由于某些原因,有时不会\xe2\x80\ x99t 发生,我无法\xe2\x80\x99 理解为什么任务没有启动,尽管事实上有互联网并且任务在队列中。\n你如何确定为什么任务不会启动?\n有人知道吗?有更好的建议吗?
\n\n//run task\nrunOneTimeWorkByType<GetDocumentsWorker>(GET_DOCUMENTS_TAG)\n\n private inline fun <reified W : Worker> runOneTimeWorkByType(tag: String) {\n val workerInfoList = workManager\n .getWorkInfosByTag(tag)\n .get()\n\n for (item in workerInfoList) {\n if (item.state == WorkInfo.State.ENQUEUED){\n return\n }\n }\n\n val constraints = Constraints.Builder()\n .setRequiredNetworkType(NetworkType.CONNECTED)\n .build()\n\n val workRequest =\n OneTimeWorkRequestBuilder<W>()\n .setConstraints(constraints)\n .addTag(tag)\n .build()\n\n workManager.enqueue(workRequest)\n }\n\n\n class GetDocumentsWorker(ctx: Context, workerParams: WorkerParameters) :\n Worker(ctx, workerParams) {\n @Inject\n lateinit var serviceUtils: ServiceUtils\n\n init {\n App.appComponent.inject(this)\n }\n\n override fun doWork(): Result {\n Log.d("workmng", "GetDocumentsWorker: start")\n try {\n serviceUtils.documentsGet()\n } catch (e: Exception) {\n Log.d("workmng", "GetDocumentsWorker: exception", e.cause)\n return Result.retry()\n }\n Log.d("workmng", "GetDocumentsWorker: end")\n return Result.success()\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n\n更新:
\n\n我尝试无条件启动任务,但在这种情况下,也没有任何启动,有想法为什么会这样?
\n\nfun runGetDocumentsTask() {\n val workRequest =\n OneTimeWorkRequestBuilder<GetDocumentsWorker>()\n .addTag(GET_DOCUMENTS_TAG)\n .build()\n\n workManager.enqueue(workRequest)\n }\nRun Code Online (Sandbox Code Playgroud)\n\n当我取消工作时,一切开始正常工作:workManager.cancelAllWork()
创建worker时,我运行了几个周期性任务,它们会出现问题吗?如果是这样,如何解决?
\n\nprivate var workManager: WorkManager = WorkManager.getInstance(ctx)\n\n init {\n //workManager.cancelAllWork()\n runSendAllPeriodicTasks()\n }\n\n private fun runSendAllPeriodicTasks() {\n runOneTimeWorkOnPeriod<SendAllWorker>(15, TimeUnit.MINUTES)\n runOneTimeWorkOnPeriod<FailureFilesResendWorker>(3, TimeUnit.HOURS)\n runOneTimeWorkOnPeriod<GetItemsWorker>(1, TimeUnit.HOURS)\n }\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2302 次 |
| 最近记录: |