如果应用程序更新,WorkManager的队列会被清除吗?

7

每次应用程序启动时,我都使用ExistingPeriodicWorkPolicy.KEEP排队定期工作,以便如果已经有计划,则不会排队其他工作。

假设在未来的应用程序更新中,我更改了工作的约束或周期性,但保留了原始的uniqueName。这个更改会被忽略吗,因为PeriodicWorkRequest使用相同的uniqueWorkName

还是说当应用程序更新时,所有应用程序的工作都将被取消,因此这不是问题?

在这里最好的方法是什么?

2个回答

6

在更新应用程序时,计划中的工作将被保留。

如果您想修改workRequest,唯一的选项是取消之前的请求并注册一个新请求。

我认为这不是WorkManager特定的问题,因为新的应用程序版本可能需要进行一次性操作(介绍新功能,迁移某些首选项,修改某些WorkManager工作等)。有一些有用的答案使用SharedPreferences在此问题中。

我会在应用程序处理升级的部分添加此WorkRequest更改。


5
根据Android开发者文档中的WorkManager所述,除了uniqueWorkName外,您还可以为WorkRequest设置特定的Tag。实际上,您可以保留uniqueWorkName而不用担心它。
当您需要更改WorkRequest的约束条件时,您需要首先从队列中删除旧式的WorkRequest,然后将新式的WorkRequest添加到队列中。
以下是一些代码示例。
PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(FooWorker.class)
    .addTag("m_TAG_Version_1")
    .build();
workManager
    .enqueueUniquePeriodicWork("uniqueWorkName", ExistingPeriodicWorkPolicy.KEEP, request);

那么在未来

if(isWorkUpdated)
{
    workManager.cancelAllWorkByTag("m_TAG_Version_1");
    PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(FooWorker.class)
        .addTag("m_TAG_Version_2")
        .build();
    workManager
        .enqueueUniquePeriodicWork("uniqueWorkName", ExistingPeriodicWorkPolicy.KEEP, request);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接