问题描述
我正在尝试观察我的workers
,但是它们始终处于queued
状态,或者有时是RUNNING
,但从未处于SUCCEED
或FAILED
.
I am trying to observe my workers
but they are always in queued
state or sometime it's RUNNING
but never SUCCEED
or FAILED
.
workStatus.state
是从doWork()
返回的还是不同的?
is workStatus.state
from return in doWork()
or it's different?
这是我的工作脚本:
package com.mockie.daikokuten.sync.workers
import androidx.work.Worker
class TestWorker:Worker()
{
override fun doWork():Worker.Result
{
return Worker.Result.SUCCESS
}
}
这是观察工人的脚本:
val test = PeriodicWorkRequest.Builder(
TestWorker::class.java,
PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,
TimeUnit.MILLISECONDS)
.addTag("test_worker")
.build()
WorkManager.getInstance()?.enqueueUniquePeriodicWork("test_worker", ExistingPeriodicWorkPolicy.KEEP, test)
WorkManager.getInstance()!!.getStatusesByTag("test_worker")
.observe(this, Observer { workStatus ->
if (workStatus != null)
{
for(ws in workStatus)
{
Log.d(":dump2 id ", ws.id.toString())
Log.d(":dump2 tag", ws.tags.toString())
Log.d(":dump2 state", ws.state.toString())
}
}
})
这是Logcat中的结果:
this is the result in Logcat:
07-23 17:12:30.901 29740-29740/com.mockie.daikokuten D/:dump2 id: 5c6297f7-11d8-4f2f-a327-773672a7435c
07-23 17:12:30.901 29740-29740/com.mockie.daikokuten D/:dump2 tag: [test_worker, com.mockie.daikokuten.sync.workers.TestWorker]
07-23 17:12:30.901 29740-29740/com.mockie.daikokuten D/:dump2 state: ENQUEUED
推荐答案
对于您的定期工作要求,您应该看到
For your periodic work request you should see
ENQUEUED - RUNNING - ENQUEUED
其中后一个ENQUEUED是下一个工作请求的状态.
where the latter ENQUEUED is the state of the next work request.
在运行和入队之间,您可能会短暂获得成功,但我从未见过.
You might get very briefly a SUCCEEDED between RUNNING and ENQUEUED, but I have never seen that.
对于一次性工作请求,您会看到
For a onetime work request you see
ENQUEUED - RUNNING - SUCCEEDED
或您在doWork()中返回的任何内容.
or whatever you return in doWork().
(Android 8.1 API 27,1.0.0-alpha04)
(Android 8.1 API 27, 1.0.0-alpha04)
这篇关于工作状态观察者始终处于排队状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!