【问题标题】:WorkManager executing every time when I install (run) app每次安装(运行)应用程序时都会执行 WorkManager
【发布时间】:2019-06-10 13:23:48
【问题描述】:

我通过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 performance android-workmanager workmanagers


【解决方案1】:

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

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

【讨论】:

  • 我正在使用 Android Studio,有什么原因导致它停止了吗?
  • 您在哪个设备上看到这个?您可以在模拟器上进行测试以验证您是否遇到相同的问题?
  • 我使用的是三星设备。我也试过模拟器。
  • 你能发布一些你用来排队 Worker 类的代码吗?我在回复中的意思是,如果您通过 Android Studio 启动应用程序,然后从那里停止它,它会被标记为强制停止,并且所有工作都将从底层 JobScheduler API 中删除。当您重新启动应用程序时,WorkManager 从其数据库中检索 WorkRequest 并重新启动 Work。但我需要更多关于您如何启动/停止应用程序以及您正在使用的代码的信息,以确保这是正在发生的事情。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    根据document

    REPLACE 确保如果有标记为 uniqueWorkName,将被取消,新的工作将运行。 KEEP 将运行新的 PeriodicWorkRequest 仅当没有 标有uniqueWorkName 的待处理工作。

    【讨论】:

      【解决方案4】:

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

      查看this link 了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-18
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多