工作状态观察者始终处于排队状态

Kak*_*shi 3 android kotlin android-studio android-workmanager

我试图观察我的workers但他们总是处于queued状态或有时它'sRUNNING但从来没有SUCCEEDFAILED

\n\n

workStatus.state来自 returndoWork()还是不同?

\n\n

这是我的工作脚本:

\n\n
package com.mockie.daikokuten.sync.workers\n\nimport androidx.work.Worker\n\n\nclass TestWorker:Worker()\n{\n\noverride fun doWork():Worker.Result\n{\n    return Worker.Result.SUCCESS\n}\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是观察工人的脚本:

\n\n
 val test = PeriodicWorkRequest.Builder(\n            TestWorker::class.java,\n            PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,\n            TimeUnit.MILLISECONDS)\n            .addTag("test_worker")\n            .build()\n\n    WorkManager.getInstance()?.enqueueUniquePeriodicWork("test_worker", ExistingPeriodicWorkPolicy.KEEP, test)\n\n    WorkManager.getInstance()!!.getStatusesByTag("test_worker")\n            .observe(this, Observer { workStatus ->\n                if (workStatus != null)\n                {\n                    for(ws in workStatus)\n                    {\n                        Log.d(":dump2 id ", ws.id.toString())\n                        Log.d(":dump2 tag", ws.tags.toString())\n                        Log.d(":dump2 state", ws.state.toString())\n                    }\n                }\n            })\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是 Logcat 中的结果:

\n\n
 07-23 17:12:30.901 29740-29740/com.mockie.daikokuten D/:dump2\xc2\xa0id: 5c6297f7-11d8-4f2f-a327-773672a7435c\n 07-23 17:12:30.901 29740-29740/com.mockie.daikokuten D/:dump2\xc2\xa0tag: [test_worker, com.mockie.daikokuten.sync.workers.TestWorker]\n 07-23 17:12:30.901 29740-29740/com.mockie.daikokuten D/:dump2\xc2\xa0state: ENQUEUED\n
Run Code Online (Sandbox Code Playgroud)\n

nst*_*022 5

对于您的定期工作请求,您应该看到

ENQUEUED - RUNNING - ENQUEUED
Run Code Online (Sandbox Code Playgroud)

其中后者 ENQUEUED 是下一个工作请求的状态。

您可能会在 RUNNING 和 ENQUEUED 之间非常短暂地获得 SUCCEEDED,但我从未见过这种情况。

对于一次性工作请求,您会看到

ENQUEUED - RUNNING - SUCCEEDED
Run Code Online (Sandbox Code Playgroud)

或您在 doWork() 中返回的任何内容。

(Android 8.1 API 27、1.0.0-alpha04)