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

Nin*_*off 7 android android-workmanager

在每次应用程序启动时,我都会使用 ExistingPeriodicWorkPolicy.KEEP 将定期工作排入队列,以便在已有计划的情况下不会对任何其他工作进行排队。

假设在将来的应用程序更新中,我更改了工作的约束或周期,但保留原始的uniqueName. PeriodicWorkRequest由于使用相同,此更改会被忽略吗uniqueWorkName?

或者这不会成为问题,因为应用程序更新时,应用程序的所有工作都会被取消?

这里最好的方法是什么?

pfm*_*ggi 6

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

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

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

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


Mr.*_*.AF 5

作为工作经理 | Android 开发者表示,您可以设置特定Tag于. 事实上,您可以保存而不必担心。WorkRequestuniqueWorkNameuniqueWorkName

当您需要更改约束时WorkRequest,您需要首先从队列中消除旧式约束,WorkRequest然后将新型约束添加到队列中。

这是一些代码

PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(FooWorker.class)
    .addTag("m_TAG_Version_1")
    .build();
workManager
    .enqueueUniquePeriodicWork("uniqueWorkName", ExistingPeriodicWorkPolicy.KEEP, request);
Run Code Online (Sandbox Code Playgroud)

那么在未来

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);
}
Run Code Online (Sandbox Code Playgroud)