我想与 worker 安排另一份工作。但是,我在文档中找不到是否允许这样做。
类似于:
class MyWorker(context: Context, params: WorkerParameters): CoroutineWorker(context, params) {
override val coroutineContext = Dispatchers.IO
override suspend fun doWork(): Result = coroutineScope {
val syncWorker = OneTimeWorkRequestBuilder<MyWorker>()
.setInitialDelay(3000, TimeUnit.MILLISECONDS)
.build()
WorkManager.getInstance(context)
.enqueueUniqueWork("MyJob", ExistingWorkPolicy.REPLACE, syncWorker)
Result.success()
}
最佳答案
是的,可以,但有一个异常(exception)。
唯一可能危险的情况是,如果您使用来自同一工作人员实例的 ExistingWorkPolicy.REPLACE
对唯一工作人员进行排队(以您的示例为例,您无法从同一工作人员重新安排工作) syncWorker
):
class syncWorker(context: Context, params: WorkerParameters): CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
withContext(Dispatchers.IO) {
val syncWorker = OneTimeWorkRequestBuilder<MyWorker>()
.build()
// DON'T DO THIS!!!
// You may end up with two instances of the same worker
// running at the same time
WorkManager.getInstance(context)
.enqueueUniqueWork("MyJob", ExistingWorkPolicy.REPLACE, syncWorker)
Result.success()
}
}
}
另请注意 coroutineContext
is now deprecated 。请改用 withContext(Dispatchers.IO)
就像我的代码 fragment 中所示。
关于android - CoroutineWorker 可以安排另一个 Worker 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65020650/