定期工作请求不起作用 - 为什么?



我正在使用带有Workmanger的PeriodicWorkRequest,每2小时从应用程序发送一次本地通知。但什么也没发生。一旦我打开应用程序,doWork(( 方法就会被调用并出现通知,但当应用程序在后台或从最近的应用程序历史记录中删除时不会

显示
Constraints constraints = new Constraints.Builder()
.setRequiresCharging(false)
.setRequiresDeviceIdle(true)
.setRequiresBatteryNotLow(true)
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();

final PeriodicWorkRequest periodicWorkRequest
= new PeriodicWorkRequest.Builder(ShowNotificationJob.class, 2, TimeUnit.HOURS)
.setConstraints(constraints)
.build();
WorkManager.getInstance(this).enqueueUniquePeriodicWork(TASK_ID,
ExistingPeriodicWorkPolicy.REPLACE, periodicWorkRequest);

确保使用稳定版本的 Workmanager 库 https://developer.android.com/jetpack/androidx/releases/work#declaring_dependencies

如果不需要,请删除这些constraints

https://developer.android.com/reference/androidx/work/Constraints.Builder

使用这些约束可能是在后台无法工作的原因 因此,请确保使用这些约束作为要求

并使用 ExistingPeriodicWorkPolicy.KEEP而不是 ExistingPeriodicWorkPolicy.REPLACE - 如果工作管理器,这将不会创建新对象

.setRequiresCharging(false)
.setRequiresDeviceIdle(true)
.setRequiresBatteryNotLow(true)
.setRequiredNetworkType(NetworkType.CONNECTED)

最终代码

Constraints constraints = new Constraints.Builder()
.build();

final PeriodicWorkRequest periodicWorkRequest
= new PeriodicWorkRequest.Builder(ShowNotificationJob.class, 2, TimeUnit.HOURS)
.setConstraints(constraints)
.build();
WorkManager.getInstance(this).enqueueUniquePeriodicWork(TASK_ID,
ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);

相关内容

最新更新