如果应用程序更新,WorkManager 的队列是否会被清除?
Will WorkManager's queue be cleared in case of an app update?
在每次应用程序启动时,我都会使用 ExistingPeriodicWorkPolicy.KEEP 将定期工作排入队列,这样如果已经有一个计划,就不会再有额外的工作排入队列。
假设在未来的应用程序更新中,我更改了工作的约束或周期,但保持原来的 uniqueName
。
由于 PeriodicWorkRequest
使用相同的 uniqueWorkName
,此更改是否会被忽略?
或者这不会成为问题,因为应用程序更新时,应用程序的所有工作都被取消了吗?
最好的方法是什么?
如 WorkManager | Android Developer 所述,除了 uniqueWorkName
之外,您还可以将特定的 Tag
设置为 WorkRequest
。事实上,您可以保留 uniqueWorkName
而不必担心它。
当您需要更改 WorkRequest
的约束时,您需要首先从队列中删除 old-fashioned WorkRequest
,然后将 new-fashioned 添加到队列中.
这是一段代码
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);
}
当您更新您的应用程序时,计划的工作将得到维护。
如果要修改 workRequest
唯一的选择是取消之前的请求并注册一个新的。
我不认为这是 WorkManager 的特定问题,因为新的应用程序版本可能只需要执行一次操作(加入新功能、迁移某些首选项、修改某些 WorkManager 工作等)。在 this question.
中使用 SharedPreferences 有一些有用的答案
我会在您的应用程序中处理升级的部分添加此 WorkRequest 更改。
在每次应用程序启动时,我都会使用 ExistingPeriodicWorkPolicy.KEEP 将定期工作排入队列,这样如果已经有一个计划,就不会再有额外的工作排入队列。
假设在未来的应用程序更新中,我更改了工作的约束或周期,但保持原来的 uniqueName
。
由于 PeriodicWorkRequest
使用相同的 uniqueWorkName
,此更改是否会被忽略?
或者这不会成为问题,因为应用程序更新时,应用程序的所有工作都被取消了吗?
最好的方法是什么?
如 WorkManager | Android Developer 所述,除了 uniqueWorkName
之外,您还可以将特定的 Tag
设置为 WorkRequest
。事实上,您可以保留 uniqueWorkName
而不必担心它。
当您需要更改 WorkRequest
的约束时,您需要首先从队列中删除 old-fashioned WorkRequest
,然后将 new-fashioned 添加到队列中.
这是一段代码
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);
}
当您更新您的应用程序时,计划的工作将得到维护。
如果要修改 workRequest
唯一的选择是取消之前的请求并注册一个新的。
我不认为这是 WorkManager 的特定问题,因为新的应用程序版本可能只需要执行一次操作(加入新功能、迁移某些首选项、修改某些 WorkManager 工作等)。在 this question.
中使用 SharedPreferences 有一些有用的答案我会在您的应用程序中处理升级的部分添加此 WorkRequest 更改。