Android 一个狼人能安排另一个工人吗?

Android 一个狼人能安排另一个工人吗?,android,android-workmanager,Android,Android Workmanager,我想和一个工人安排另一份工作。但是,我在文件中找不到是否允许这样做 比如: 类MyWorker(上下文:上下文,参数:WorkerParameters):CoroutineWorker(上下文,参数){ override val coroutineContext=Dispatchers.IO 重写suspend fun doWork():Result=coroutineScope{ val syncWorker=OneTimeWorkRequestBuilder() .setInitialDel

我想和一个工人安排另一份工作。但是,我在文件中找不到是否允许这样做

比如:

类MyWorker(上下文:上下文,参数:WorkerParameters):CoroutineWorker(上下文,参数){
override val coroutineContext=Dispatchers.IO
重写suspend fun doWork():Result=coroutineScope{
val syncWorker=OneTimeWorkRequestBuilder()
.setInitialDelay(3000,时间单位为毫秒)
.build()
WorkManager.getInstance(上下文)
.enqueueUniqueWork(“MyJob”,ExistingWorkPolicy.REPLACE,syncWorker)
结果:成功()
}

是的,您可以,但有一个例外

唯一危险的情况是,如果您正在使用
现有工作策略将唯一的工作线程排队。请从同一个工作线程的实例中替换
(以您为例,您不能从同一个
同步工作线程
):

class syncWorker(上下文:上下文,参数:WorkerParameters):CoroutineWorker(上下文,参数){
覆盖暂停工作():结果{
withContext(Dispatchers.IO){
val syncWorker=OneTimeWorkRequestBuilder()
.build()
//不要这样做!!!
//您可能会得到同一个worker的两个实例
//同时运行
WorkManager.getInstance(上下文)
.enqueueUniqueWork(“MyJob”,ExistingWorkPolicy.REPLACE,syncWorker)
结果:成功()
}   
}
}

另请注意,
coroutineContext
。请改用
与上下文(Dispatchers.IO)一起使用
就像我的代码片段中的show一样。

因此,我必须至少有两个工作人员,一个用于制定此手动计划?而且,如果我使用KEEP而不是REPLACE,我将避免同一工作人员的两个实例同时运行的机会?使用
ExistingWorkPolicy。KEEP
避免工作人员在已经计划好的情况下被重新安排关于你的第一个问题,正如我所说,如果你将同一个工人的另一个实例中唯一的工人排队,你可能会遇到问题。根据你在初始问题中发布的代码,情况并非如此。
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()
        }   
    }
}