【发布时间】:2021-07-08 09:25:48
【问题描述】:
我是 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
)
【问题讨论】:
标签: android android-service androidx android-jetpack android-workmanager