android-Kotlin CoroutineScope初始化取决于带有自定义getter的CoroutineContext
2020年01月20日
作者:佚名
具有视图的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-Kotlin CoroutineScope初始化取决于带有自定义getter的CoroutineContext 全部内容,希望文章能够帮你解决android-Kotlin CoroutineScope初始化取决于带有自定义getter的CoroutineContext 所遇到的程序开发问题。
如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。