【发布时间】:2024-01-30 05:00:02
【问题描述】:
我正在尝试执行每 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 文件中使用的依赖项:
implementation "android.arch.work:work-runtime:1.0.1"
谁能建议避免重复调用的最佳方法。
【问题讨论】:
-
你在哪里排队你的工作请求?
-
此外,WorkManager 在 v2.x 分支的最新稳定版本中添加了许多错误修复。这需要转移到
androidx。 -
如果您对使用
ExistingPeriodicWorkPolicy.REPLACE没有特殊要求,我建议您使用ExistingPeriodicWorkPolicy.KEEP,这样可以避免停止可能已经运行的worker来替换它。 -
我已经尝试过 KEEP 和 REPLACE ,但没有任何区别。当设备被锁定时,它无论如何都会触发两次。
-
另外,我无法迁移到 androidx,因为我的 targetSDK 版本是 26。
标签: java android android-workmanager background-service