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

WorkManager executing every time when I install (run) app

我通过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();
    }
}

登录成功后启动worker。

PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, 30, TimeUnit.MINUTES)
            .addTag("Location")
            .build();

WorkManager.getInstance().enqueueUniquePeriodicWork("Location", ExistingPeriodicWorkPolicy.REPLACE, periodicWork);

问题:

当我 运行 我的应用程序再次执行时。每次我安装 (运行) 我的应用程序时都会发生。

有解决办法吗?

如果您使用 Android Studio 安装和 运行 您的应用程序,这将被归类为强制停止。

如果您的应用使用 PeriodicWork,我们需要重新安排所有工作。因此,每次应用程序进程被 Studio 强制停止时,它都会 运行。

如果您的 workermanager 运行执行周期性任务,就会发生这种情况。如果您可以通过 sharedpreference 中的标志添加检查或检查进程是否已经启动。否则你将不得不卸载然后运行它

我认为你必须使用 ExistingPeriodicWorkPolicy.KEEP 而不是 ExistingPeriodicWorkPolicy.REPLACE

根据document

REPLACE ensures that if there is pending work labelled with uniqueWorkName, it will be cancelled and the new work will run. KEEP will run the new PeriodicWorkRequest only if there is no pending work labelled with uniqueWorkName.

删除 .addTag("Location") 行。 将 ExistingPeriodicWorkPolicy 属性从 REPLACE 更改为 KEEP。 保持其余代码不变。这个应该适合你。

查看 this link 以了解更多信息。