我需要在符合条件的情况下取消/删除我的工作。我已经读过,有一个方法onStopped()可以重写,但是它是用于简单的[[:Worker而不是CoroutineWorker。
我的工人:
class MyJob(appContext: Context, params: WorkerParameters) :
CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result {
val itemId = inputData.getLong("item_id",0)
val itemDao = ItemDB.getInstance(applicationContext).itemDao()
val itemRepository = ItemRepo(itemsDao)
val item = itemRepository.getItemById(itemId)
val newValue = item.a + item.b
item.a = newValue
itemRepository.updateItem(item)
if(item.a == item.c){
WorkManager.getInstance(applicationContext).cancelUniqueWork("TEST_WORKER")
}
return Result.success()
}
}
我的错误,我忘了提及这是一项独特的定期工作。编辑:
Result.failure()
来取消工作;因此您可以根据自己的条件添加它Result.failure()
现在您需要在活动/片段中聆听工作结果;因为您没有提供代码的这一部分,所以我会做一些假设,并使用生命周期观察模型来监听工作结果
if(item.a == item.c){ //Cancel work return Result.failure() }