Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 锁定设备时,WorkManager多次调用doWork()方法_Java_Android_Android Workmanager_Background Service - Fatal编程技术网

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

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

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

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()中的工作。