gpt4 book ai didi

android - Kotlin CoroutineScope 初始化取决于带有自定义 getter 的 CoroutineContext

转载 作者:太空狗 更新时间:2023-10-29 13:02:23 25 4
gpt4 key购买 nike

Google Codelab Android Room with a View - Kotlin 具有以下 snippet :

class WordViewModel(application: Application) : AndroidViewModel(application) {

// ...

private val coroutineContext: CoroutineContext
get() = parentJob + Dispatchers.Main

private val scope = CoroutineScope(coroutineContext)

// ...

}

据我了解 this答案是,每次都会评估自定义 getter,而仅在构造时评估赋值。所以实际上,scope 会取一个以后不会改变的值,那么 coroutineContext 的自定义 getter 有什么用呢?

最佳答案

coroutineContext的定义当您定义 CoroutineScope 时,作为计算属性(或自定义 getter)更有意义在具有生命周期的组件中(即 Android Activity )。 Javadoc 中的示例不言自明:

class MyActivity : AppCompatActivity(), CoroutineScope {
lateinit var job: Job
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
job = Job()
}

override fun onDestroy() {
super.onDestroy()
job.cancel() // Cancel job on activity destroy. After destroy all children jobs will be cancelled automatically
}
}

在这种情况下,您正在创建 Job在生命周期方法中,这就是为什么您需要计算属性来返回 coroutineContext 的原因与 JobonCreate 中创建的实例.

关于android - Kotlin CoroutineScope 初始化取决于带有自定义 getter 的 CoroutineContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54260235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com