Java 锁定设备时,WorkManager多次调用doWork()方法
我正在尝试执行每15分钟运行一次的后台同步。以下是要进行同步的WorkManager初始化:Java 锁定设备时,WorkManager多次调用doWork()方法,java,android,android-workmanager,background-service,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", ExistingPe
PeriodicWorkRequest syncRequest = new PeriodicWorkRequest.Builder(MyWorkerClass.class, 15, TimeUnit.MINUTES).addTag("sync").build();
WorkManager.getInstance().enqueueUniquePeriodicWork("sync", ExistingPeriodicWorkPolicy.REPLACE, syncRequest);
但当我的设备被锁定时,由于某些原因,此同步会发生两次,直到设备解锁。一旦设备解锁并启动应用程序,此同步会触发两次,但从下一次同步开始,它工作正常
设备am使用的是TC25斑马牛轧糖
我在我的app.gradle文件中使用的依赖项:
implementation“android.arch.work:workruntime:1.0.1”
任何人都可以提出避免重复呼叫的最佳方法。您需要正确处理停止的
回调,并协同停止工作。否则,您肯定会看到您的Worker
的多个实例同时运行。您的工作请求在哪里排队?此外,WorkManager在v2.x分支的最新稳定版本上添加了许多错误修复。这需要移动到androidx
。如果您没有使用ExistingPeriodicWorkPolicy.REPLACE
,我建议您使用ExistingPeriodicWorkPolicy.KEEP
,这可以避免停止可能已经运行的工作程序以新的工作程序替换它。我尝试了KEEP和REPLACE,没什么不同。当设备被锁定时,它无论如何会触发两次。此外,我无法迁移到androidx,因为我的targetSDK版本是26。如果这是一个定期请求,那么为什么我需要停止onStopped method()中的工作。