-1

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

问题:

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

有什么解决办法吗?

4

4 回答 4

0

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

于 2019-06-12T08:51:18.570 回答
0

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

根据文件

REPLACE确保如果有标记为 的待处理工作 uniqueWorkName,它将被取消并运行新工作。 只有在没有标记为 的待处理工作时KEEP才会运行新的。PeriodicWorkRequestuniqueWorkName

于 2020-10-04T07:20:13.680 回答
0

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

查看此链接以了解更多信息。

于 2021-07-17T13:37:07.070 回答
0

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

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

于 2019-06-10T13:35:41.197 回答