如何解决如何在 doWork() 调用后更新 PeriodicWorkRequest 的 timeInterval
我是 android 工作管理器的新手,我想在收到服务器响应后更新 PeriodicWorkRequest 的 timeInterval。这是我尝试更新 timeInterval 的示例代码。但是它将进入调用 doWork() 函数的无限循环。请告诉我哪里错了。
class RandomNumberGenerator(context: Context,workerParams: WorkerParameters) : Worker(
context,workerParams) {
private val min = 0
private val max = 100
var randomNumber = 0
var context: Context
init {
Log.d(TAG,"Constructor invoked")
this.context = context
Log.d(TAG,"" + workerParams.id.toString())
}
private fun startRandomNumberGenerator() {
Log.d(TAG,"startRandomNumberGenerator: isStopped: $isStopped")
var i = 0
while (i < 5) {
try {
Thread.sleep(1000)
randomNumber = Random().nextInt(max) + min
Log.d(
TAG,"Thread Id: " + Thread.currentThread().id + " Random Number: " + randomNumber
)
i++
} catch (e: Exception) {
}
if (i == 5) {
callUpdateSyncTime()
}
}
}
private fun callUpdateSyncTime() {
Log.d(TAG,"callUpdateSyncTime() called")
val periodicWork =
PeriodicWorkRequest.Builder(RandomNumberGenerator::class.java,20,TimeUnit.MINUTES)
.build()
WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(
"work_manager_random",ExistingPeriodicWorkPolicy.REPLACE,periodicWork
)
}
companion object {
const val TAG = "WorkManager"
}
override fun doWork(): Result {
startRandomNumberGenerator()
return Result.success()
}
override fun onStopped() {
Log.d(TAG,"onStopped() called")
super.onStopped()
}
}
这是我如何从 MainActivity 排队的代码
val workRequestRandomNumber: PeriodicWorkRequest =
PeriodicWorkRequestBuilder<RandomNumberGenerator>(
15,TimeUnit.MINUTES
).build()
workManager.enqueueUniquePeriodicWork(
"work_manager_random",ExistingPeriodicWorkPolicy.KEEP,workRequestRandomNumber
)
解决方法
当您将 PeriodicWorkRequest 入队时,如果您不使用 setInitialDelay()
添加初始延迟,它将立即执行。
鉴于您在每次完成工作时都会重新安排工作时间,我建议您使用 OneTimeWorkRequest
,而不是重复使用,并带有初始延迟:
val workRequestRandomNumber =
OneTimeWorkRequestBuilder<RandomNumberGenerator>()
.setInitialDelay(
15,TimeUnit.MINUTES)
.addTag("work_manager_random")
.build()
workManager.enqueue(workRequestRandomNumber)
就目前而言,WorkManager 正在向您的工作人员发送您忽略的取消通知。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。