我正在使用带有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);