java - 当设备锁定时,WorkManager 多次调用 doWork() 方法

标签 java android android-workmanager background-service

我正在尝试执行每 15 分钟运行一次的后台同步。以下是同步发生时的 WorkManager 初始化:

PeriodicWorkRequest syncRequest = new PeriodicWorkRequest.Builder(MyWorkerClass.class, 15, TimeUnit.MINUTES).addTag("sync").build();
WorkManager.getInstance().enqueueUniquePeriodicWork("sync", ExistingPeriodicWorkPolicy.REPLACE, syncRequest);

但是当我的设备被锁定时,由于某些原因,这种同步会发生两次,直到设备解锁为止。一旦设备解锁并启动应用程序,此同步就会触发两次,但从下一次同步开始,它就可以正常工作。

我使用的设备是在 Nougat 上运行的 TC25 Zebra

我的 app.gradle 文件中使用的依赖项:

实现“android.arch.work:work-runtime:1.0.1”

任何人都可以建议避免重复调用的最佳方法吗?

最佳答案

您需要正确处理onStopped回调并配合停止您的工作。否则,您肯定会看到 Worker 的多个实例同时运行。

关于java - 当设备锁定时,WorkManager 多次调用 doWork() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58413052/

相关文章:

java - 这里到底发生了什么?这是交换两个变量的代码

java - Mapsforge 将按钮添加到 Mapview

android - 将高配置文件 H.264 流解码为基线配置文件

android - 如何在 android 中将复杂类型的对象传递给 WorkManager。即列表、 map 、POJO

java - 是否有一种舍入算法可以取消以 2 为基数的转换并推断精度? *希望在Java中*

java - 多次调用自定义 ListView 适配器 getView 方法,并且顺序不一致

Java 大十进制问题

android - 使用可绘制资源

android - 协程 worker : interrupt doWork() on cancelPendingIntent action

java - 如何让 WorkManager 一直在后台运行