如何解决如果有应用程序更新,是否会清除WorkManager的队列?
在每次启动应用程序时,我都使用ExistingPeriodicWorkPolicy.KEEP安排定期工作入队,因此,如果已经有时间表,则不会将其他工作排队。
让我们假设在以后的应用程序更新中,我更改了工作的约束或周期性,但保留了原始的uniqueName
。
是否会因为PeriodicWorkRequest
使用相同的uniqueWorkName
而忽略此更改?
或者这不是问题,因为在更新应用程序时,该应用程序的所有工作都被取消了吗?
这里最好的方法是什么?
解决方法
当您更新应用程序时,将保留计划的工作。
如果要修改workRequest
,唯一的选择是取消上一个请求并注册一个新请求。
我不认为这是WorkManager的特定问题,因为新的应用程序版本可能只需要执行一次操作(启用新功能,迁移一些首选项,修改某些WorkManager工作等)。在this question中使用SharedPreferences有一些有用的答案。
我会在处理升级的应用程序部分中添加此WorkRequest更改。
,如WorkManager | Android Developer所述,除了Tag
之外,您还可以将特定的WorkRequest
设置为uniqueWorkName
。确实,您可以保留uniqueWorkName
,而不必担心。
当您需要更改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",request);
}
以后再来
dataset
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。