WorkManager在Result.success()时调用onStopped()。

4
Worker被异常停止或被取消时,应调用onStopped()方法以确保正确执行。当其工作已正常完成时,不应调用此方法。请问这个理解是否正确?

https://developer.android.com/reference/androidx/work/ListenableWorker#onstopped

Worker被告知停止时,将调用此方法。这可能是由用户发出的明确取消信号或因系统决定抢占任务而发生的。在这些情况下,WorkManager将忽略工作的结果。

在我的情况下相反:

当使用Result.success()doWork()返回时,将调用onStopped(),如果使用Result.failure()则不会调用。

当调用WorkManager.getInstance().cancelWorkById(id)时,同样会调用onStopped()(尽管这似乎是正确的)。


我正在使用 androidx.work:work-runtime-ktx2.0.0-rc01 版本。
有没有一种(可靠的)方法来获知工作程序“已正常完成”和“已异常停止”的情况?
我认为后者情况下会使用 onStopped()。这可能是一个错误吗?

我已经提了一个 Bug 报告,以防万一: https://issuetracker.google.com/issues/128470210 - hardysim
能否请您添加一些代码?这看起来确实是奇怪的行为... - Re'em
这可能已经过时了。请参阅链接的错误报告。当取消作业时,我已成功地安排了自己与“尽力而为政策”的(预期)行为。 - hardysim
1个回答

1
我也遇到了同样的问题。请查看此问题以获取更多详细信息。 这个问题在2.3.0-alpha02版本中得到了修复。当我更新了版本后,它正常工作了。
implementation "androidx.work:work-runtime:2.3.0-alpha02"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接