当我的工作符合条件时,我需要取消/取消它。我已经读到有一个方法onStopped()可以被重写,但是它是针对简单:Worker而不是针对的
我的工人:
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()
    }
}编辑:我的错误,我忘记提到这是一个独特的周期性工作。
发布于 2020-03-31 19:07:44
您可以通过返回Result.failure()(https://developer.android.com/reference/androidx/work/ListenableWorker.Result#failure(%29);因此可以在您的条件下添加它)来尝试取消该工作。
if(item.a == item.c){
    //Cancel work
    return Result.failure()
}现在,您需要在活动/片段中听取工作结果;由于您没有提供代码的这一部分,我将做一些假设,并使用生命周期观察模型听取工作结果
// instantiate periodic work
final PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(...).build();
// schedule the work
WorkManager.getInstance(this).enqueue(workRequest);
// observe the work
WorkManager.getInstance(this).getWorkInfoByIdLiveData(workRequest.getId())
        .observe(this, new Observer<WorkInfo>() {
            @Override
            public void onChanged(WorkInfo workInfo) {
                if (workInfo.getState() == WorkInfo.State.FAILED) {
                    // cancelling work
                    WorkManager.getInstance(MainActivity.this).cancelWorkById(workRequest.getId());
                }
            }
        });https://stackoverflow.com/questions/60957554
复制相似问题