在启动应用程序时,我想启动将永远运行的服务,但是当用户再次打开应用程序时,它将重复。
PeriodicWorkRequest.Builder sendDataBuilder = new PeriodicWorkRequest.Builder(SendConnectionMetricsWorker.class, Constants.REPEAT_TIME_INTERVAL_IN_HOURS, Constants.REPEAT_TIME_INTERVAL_UNITS)
.setConstraints(new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build());
PeriodicWorkRequest periodicWorkRequest = sendDataBuilder
.build();
WorkManager.getInstance().enqueue(periodicWorkRequest);
答案 0 :(得分:16)
您可以使用enqueueUniquePeriodicWork
代替enqueue
。根据文档:
此方法可让您排队一个唯一名称的 PeriodicWorkRequest,其中只有一个 特定名称可以一次处于活动状态。例如,您只能 希望激活一个同步操作。 如果有一个待处理,则可以 选择运行它还是将其替换为新作品。的 uniqueWorkName唯一标识此PeriodicWorkRequest。
您可以通过以下方式实现它:
PeriodicWorkRequest.Builder sendDataBuilder = new PeriodicWorkRequest.Builder(SendConnectionMetricsWorker.class, Constants.REPEAT_TIME_INTERVAL_IN_HOURS, Constants.REPEAT_TIME_INTERVAL_UNITS)
.setConstraints(new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build());
PeriodicWorkRequest periodicWorkRequest = sendDataBuilder
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("Send Data", ExistingPeriodicWorkPolicy.KEEP,periodicWorkRequest);
注意:
ExistingPeriodicWorkPolicy.REPLACE
确保如果有标记为uniqueWorkName的待处理工作被取消,并且新工作将运行。 ExistingPeriodicWorkPolicy.KEEP
仅在没有标有uniqueWorkName的待处理工作时才运行新的PeriodicWorkRequest。