使用WorkManager#enqueueUniqueWork时CoroutineWorker崩溃,但使用WorkManager#enqueue时则不会崩溃

时间:2020-02-27 17:53:33

标签: android android-jetpack android-workmanager

我正在使用Android Jetpacks的WorkManager。我定义了一个相当标准的CoroutineWorker来进行网络和数据库处理,但是无法使用WorkManager#enqueueUniqueWork唯一地将其加入队列。

我总是以

结尾
Work [ id=****, tags={ **** } ] was cancelled

但是,如果我使用WorkManager#enqueue,则相同的工作请求可以完美运行。

我在这里有点笨。我试图在其他地方搜索类似的问题,但我的DDG-fu让我失败了。我担心这与协程问题有关,但我对他们感到不舒服,无法知道在哪里搜索...

1 个答案:

答案 0 :(得分:0)

这是预期的。按照ExistingWorkPolicy.REPLACE Javadoc

如果存在具有相同唯一名称的待处理(未完成)工作,请取消并删除它。然后,插入新指定的作品。

因此,可以预期,使用相同唯一名称的所有作品都将被取消。对于任何类型的工作都是如此-Worker将获得对onStopped()的回调,这是需要合作取消自身的标志。

协程默认情况下支持取消,因此您的CoroutineWorker自动处理取消。