我正在使用Android Jetpacks的WorkManager。我定义了一个相当标准的CoroutineWorker
来进行网络和数据库处理,但是无法使用WorkManager#enqueueUniqueWork
唯一地将其加入队列。
我总是以
结尾Work [ id=****, tags={ **** } ] was cancelled
但是,如果我使用WorkManager#enqueue
,则相同的工作请求可以完美运行。
我在这里有点笨。我试图在其他地方搜索类似的问题,但我的DDG-fu让我失败了。我担心这与协程问题有关,但我对他们感到不舒服,无法知道在哪里搜索...
答案 0 :(得分:0)
这是预期的。按照ExistingWorkPolicy.REPLACE
Javadoc:
如果存在具有相同唯一名称的待处理(未完成)工作,请取消并删除它。然后,插入新指定的作品。
因此,可以预期,使用相同唯一名称的所有作品都将被取消。对于任何类型的工作都是如此-Worker
将获得对onStopped()
的回调,这是需要合作取消自身的标志。
协程默认情况下支持取消,因此您的CoroutineWorker
自动处理取消。