Android 即使不满足约束条件,周期性工作请求仍在运行
我正在使用WorkManager API(版本2.4.0)创建简单的定期运行任务。这是工人阶级Android 即使不满足约束条件,周期性工作请求仍在运行,android,kotlin,android-workmanager,Android,Kotlin,Android Workmanager,我正在使用WorkManager API(版本2.4.0)创建简单的定期运行任务。这是工人阶级 class BackupWorker( context: Context, workerParams: WorkerParameters ) : CoroutineWorker(context, workerParams) { override suspend fun doWork(): Result = coroutineScope { Log.i(TAG, "St
class BackupWorker(
context: Context,
workerParams: WorkerParameters
) : CoroutineWorker(context, workerParams) {
override suspend fun doWork(): Result = coroutineScope {
Log.i(TAG, "Starting worker")
makeNotification(
"Preparing worker",
applicationContext
)
sleep() //simulate long running task
for(i in 0..20) {
makeNotification(
"Firing update $i",
applicationContext,
true
)
sleep()
}
makeNotification(
"Worker complete",
applicationContext
)
Log.i(TAG, "Finishing backup worker")
Result.success()
}
}
工作请求设置如下
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresStorageNotLow(true).build();
PeriodicWorkRequest workRequest =
new PeriodicWorkRequest.Builder(BackupWorker.class,
15, TimeUnit.MINUTES)
.setConstraints(constraints)
.build();
WorkManager.getInstance(context).enqueueUniquePeriodicWork("tag_worker",
ExistingPeriodicWorkPolicy.REPLACE,
workRequest);
操作系统正在正确拾取工作请求。但是,如果我在运行时关闭Wi-Fi,它不会停止并继续运行doWork()
中的内容,这实际上与此API的整个用途相矛盾
这里少了什么东西吗?有什么想法吗?什么是
sleep()
?如果您使用的是coroutinewrker
,模拟延迟的正确方法是使用Coroutine的delay
方法。感谢您的评论。我确实把它改成了延迟方法。当Wi-Fi关闭时,它仍在运行什么是sleep()
?如果您使用的是coroutinewrker
,模拟延迟的正确方法是使用Coroutine的delay
方法。感谢您的评论。我确实把它改成了延迟方法。当Wi-Fi关闭时,它仍在运行