首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何自动取消定期工作(工作经理)?

如何自动取消定期工作(工作经理)?
EN

Stack Overflow用户
提问于 2020-03-31 18:34:38
回答 1查看 1.1K关注 0票数 0

当我的工作符合条件时,我需要取消/取消它。我已经读到有一个方法onStopped()可以被重写,但是它是针对简单:Worker而不是针对

我的工人:

代码语言:javascript
运行
复制
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()
    }
}

编辑:我的错误,我忘记提到这是一个独特的周期性工作。

EN

回答 1

Stack Overflow用户

发布于 2020-03-31 19:07:44

您可以通过返回Result.failure()(https://developer.android.com/reference/androidx/work/ListenableWorker.Result#failure(%29);因此可以在您的条件下添加它)来尝试取消该工作。

代码语言:javascript
运行
复制
if(item.a == item.c){
    //Cancel work
    return Result.failure()
}

现在,您需要在活动/片段中听取工作结果;由于您没有提供代码的这一部分,我将做一些假设,并使用生命周期观察模型听取工作结果

代码语言:javascript
运行
复制
// 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());
                }
            }
        });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60957554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档