每次安装(运行)应用程序时执行的WorkManager

时间:2019-06-10 13:23:48

标签: android performance android-workmanager workmanagers

我通过 WorkManager 创建了两个Worker。成功登录后,它每30分钟稳定一次。

登录后,它成功启动并按预期工作。

MyWorker.java

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);

问题:

当我运行我的应用程序时,它再次执行。每次我安装(运行)应用程序时都会发生这种情况。

对此有什么解决办法吗?

4 个答案:

答案 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了解更多信息。