在WorkManager文档中提到,取消Worker是尽力而为的。
WorkManager会尽最大努力取消任务,但这是不确定的——当您尝试取消任务时,任务可能已经在运行或完成。
如果我有一个使用案例,需要在调用取消方法之一时强制取消Worker怎么办?
在WorkManager文档中提到,取消Worker是尽力而为的。
WorkManager会尽最大努力取消任务,但这是不确定的——当您尝试取消任务时,任务可能已经在运行或完成。
如果我有一个使用案例,需要在调用取消方法之一时强制取消Worker怎么办?
正如您所写的,WorkManager只能尽力取消任务。特别地,如果任务已被安排运行并且您取消了它,WorkManager将从计划中删除该任务。
然而,如果任务已经在运行,WorkManager无法安全地中断它。最好的选择是编写您的Worker类时考虑外部取消。这在 Android Developer Summit 2018 中记录的 Working with WorkManager talk(大约在第15分钟)中已经介绍过。
为了成为一个好的工具,您可以使用方法ListenableWorker.isStopped()
来池化WorkManager。您可以结合onStopped
回调来清理代码,当您或操作系统请求停止任务时。