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

前端之家收集整理的这篇文章主要介绍了android-Kotlin CoroutineScope初始化取决于带有自定义getter的CoroutineContext 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

具有视图的Google Codelab Android会议室-Kotlin具有以下snippet

class Wordviewmodel(application: Application) : Androidviewmodel(application) {

    // ...

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

    private val scope = CoroutineScope(coroutineContext)

    // ...

}

从我从this答案中了解到,每次都会对自定义getter进行评估,而赋值仅在构造时进行评估.因此,实际上,作用域将采用一个以后不会更改的值,那么coroutineContext的自定义getter有什么用?

最佳答案
当您在具有生命周期的组件(即Android Activity)中定义CoroutineScope时,将coroutineContext定义为计算属性(或自定义getter)更有意义. 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的,这就是为什么您需要计算属性来返回带有在onCreate中创建的Job实例的coroutineContext的原因.

猜你在找的Android相关文章