android - CoroutineWorker 可以安排另一个 Worker 吗?

标签 android android-workmanager

我想与 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/

相关文章:

android - 如何解决工作管理器上的多实例问题?

android - WorkManager 只需要在特定的时间间隔内工作,如何使用工作管理器约束?工作管理器示例

android - 如何在 Doze 模式下检测维护窗口将关闭事件?

android - Workmanger : Getting Exception kotlinx. coroutines.JobCancellationException 的长时间运行 Worker 问题:Kotlin 中的 CoroutineWorker 中的作业被取消

java - 如何在java中为android获取El​​ementById

android - 从 SQLite Android 获取单个记录

java - 无法解析符号 observableArrayMap

android - 使用工作管理器定期工作请求不重复工作

android - 无法实例化 fragment - java.lang.RuntimeException

android - 如何获取应用的洞察