我们在项目中使用OneTimeWorkRequest来启动后台任务。
- 在应用程序启动时,我们启动OneTimeWorkRequest(称为req A)
- 根据用户的操作,我们启动相同的工作请求A。
在某些情况下,如果应用程序在工作请求A正在进行时被杀死,则当应用程序重新启动时,Android会自动重新启动请求A。我们再次启动请求A。因此,两个请求A的实例并行运行并导致死锁。
为避免这种情况,我在应用程序启动时编写了以下代码来检查工作者是否正在运行,但这始终返回false。
public static boolean isMyWorkerRunning(String tag) {
List<WorkStatus> status = WorkManager.getInstance().getStatusesByTag(tag).getValue();
return status != null;
}
有更好的处理方式吗?
我检查了beginUniqueWork()。如果我只有一个请求,这会更昂贵吗?
编辑2: 这个问题是关于独特的一次性任务。对于启动唯一的周期性任务,我们有一个单独的API enqueueUniquePeriodicWork()。但是我们没有一个API用于启动独特的一次性工作。我困惑于使用续集对象还是手动检查和启动方法。
在最近的构建中,Android添加了新的API用于此enqueueUniqueWork()。这正是他们在发布说明中提到的原因。
添加WorkManager.enqueueUniqueWork() API以无需创建WorkContinuation即可排队唯一的OneTimeWorkRequests。 https://developer.android.com/jetpack/docs/release-notes