我通过 WorkManager 创建了两个Worker。成功登录后,它每30分钟稳定一次。
登录后,它成功启动并按预期工作。
public class MyWorker extends Worker {
private Context mContext;
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
mContext = context;
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, "doWork: Done");
return Result.success();
}
}
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, 30, TimeUnit.MINUTES)
.addTag("Location")
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("Location", ExistingPeriodicWorkPolicy.REPLACE, periodicWork);
当我运行我的应用程序时,它再次执行。每次我安装(运行)应用程序时都会发生这种情况。
对此有什么解决办法吗?
答案 0 :(得分:0)
如果您使用Android Studio安装和运行应用程序,则将其归类为强制停止。
如果您的应用程序使用PeriodicWork,我们需要重新安排所有工作。因此,它将在Studio强制停止应用进程时运行。
答案 1 :(得分:0)
如果您的工人经理正在执行定期任务,则会发生这种情况。如果可以通过sharedpreference中的标志添加检查,或者检查该过程是否已经开始。否则,您必须先卸载然后再运行
答案 2 :(得分:0)
我认为您必须使用ExistingPeriodicWorkPolicy.KEEP
而不是ExistingPeriodicWorkPolicy.REPLACE
根据document:
REPLACE
确保是否有标记为uniqueWorkName
,它将被取消并且新作品将运行。KEEP
仅在不存在新PeriodicWorkRequest
时运行 标有uniqueWorkName
的待处理作品。
答案 3 :(得分:0)
删除 .addTag("Location")
行。
将 ExistingPeriodicWorkPolicy 属性从 REPLACE 更改为 KEEP。
保留其余代码原样。这个应该适合你。
查看this link了解更多信息。