避免重复来自WorkManager的PeriodicWorkRequest [英] Avoiding duplicating PeriodicWorkRequest from WorkManager

查看:150
本文介绍了避免重复来自WorkManager的PeriodicWorkRequest的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在启动应用程序时,我想启动将永远运行的服务,但是当用户再次打开应用程序时,它将重复.

On Application start I want to start service that will work forever, but when user opens app again it duplicates.

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);

推荐答案

您可以使用 enqueueUniquePeriodicWork 代替 enqueue .根据文档:

You can use enqueueUniquePeriodicWork instead of enqueue. Based on the documentation:

此方法可让您排队一个唯一名称的PeriodicWorkRequest,其中只有一个特定名称可以一次处于活动状态.例如,您只能希望一个同步操作处于活动状态.如果有一个待处理,则可以选择运行它还是将其替换为新作品.这uniqueWorkName唯一标识此PeriodicWorkRequest.

您可以通过以下方式实现它:

You can achieve it as follows:

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.

ExistingPeriodicWorkPolicy.REPLACE ensures that if there is pending work labelled with uniqueWorkName, it will be cancelled and the new work will run. ExistingPeriodicWorkPolicy.KEEP will run the new PeriodicWorkRequest only if there is no pending work labelled with uniqueWorkName.

这篇关于避免重复来自WorkManager的PeriodicWorkRequest的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆