Spi*_*pau 6 android android-architecture-components android-jetpack android-workmanager
当用户再次上线时,我使用WorkManager版本 2.2.0 来启动 Coroutines API 调用。
在 Google 的示例中,如果我想将 CoroutineWorker 的 Thread 从默认值 ( Dispatchers.Default
) 更改为Dispatchers.IO
,那么我只需覆盖val
coroutineContext
例如:
class CoroutineDownloadWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {
override val coroutineContext = Dispatchers.IO
override suspend fun doWork(): Result = coroutineScope {
// do some work here and return a Result
}
}
Run Code Online (Sandbox Code Playgroud)
但是 Android Studio 和文档告诉我,coroutineContext
不推荐使用覆盖:
我错过了什么,我该如何解决这个问题?
您的问题的答案在发行说明中:
弃用 CoroutineWorker.coroutineContext。该字段被错误地输入为 CoroutineDispatcher;您应该不再需要它,因为您可以自己在挂起函数的主体中转到所需的 coroutineContext。
https://developer.android.com/jetpack/androidx/releases/work#2.1.0-alpha01
来源中也有答案:
/**
* The coroutine context on which [doWork] will run. By default, this is [Dispatchers.Default].
*/
@Deprecated(message = "use withContext(...) inside doWork() instead.")
open val coroutineContext = Dispatchers.Default
Run Code Online (Sandbox Code Playgroud)
因此,您可以执行以下操作:
override suspend fun doWork(): Result = withContext(Dispatchers.IO) { ...