加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长资讯 > 评论 > 正文

如何正确的在 Android 上使用 Kotlin 协程?

发布时间:2019-10-25 10:41:12 所属栏目:评论 来源:kengsirLi
导读:前言 你还记得是哪一年的 Google IO 正式宣布 Kotlin 成为 Android 一级开发语言吗?是 Google IO 2017 。如今两年时间过去了,站在一名 Android 开发者的角度来看,Kotlin 的生态环境越来越好了,相关的开源项目和学习资料也日渐丰富,身边愿意去使用或者

所以 livedata-ktx 的使用是有一定限制的。对于需要用户主动刷新的场景,就无法满足了。在一次完整的生命周期内,一旦成功执行完成一次,就没有办法再触发了。 这句话不知道对不对,我个人是这么理解的。因此,还是 viewmodel-ktx 的适用性更广,可控性也更好。

LifecycleScope

  1. implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0-alpha03" 

lifecycle-runtime-ktx 给每个 LifeCycle 对象通过扩展属性定义了协程作用域 lifecycleScope 。你可以通过 lifecycle.coroutineScope 或者 lifecycleOwner.lifecycleScope 进行访问。示例代码如下:

  1. fun getMessageByLifeCycle(lifecycleOwner: LifecycleOwner) { 
  2.  lifecycleOwner.lifecycleScope.launch { 
  3.  val deferred = async(Dispatchers.IO) { getMessage("LifeCycle Ktx") } 
  4.  mMessage.value = deferred.await() 
  5.  } 

当 LifeCycle 回调 onDestroy() 时,协程作用域 lifecycleScope 会自动取消。在 Activity/Fragment 等生命周期组件中我们可以很方便的使用,但是在 MVVM 中又不会过多的在 View 层进行逻辑处理,viewModelScope 基本就可以满足 ViewModel 中的需求了,lifecycleScope 也显得有点那么食之无味。但是他有一个特殊的用法:

  1. suspend fun <T> Lifecycle.whenCreated() 
  2. suspend fun <T> Lifecycle.whenStarted() 
  3. suspend fun <T> Lifecycle.whenResumed() 
  4. suspend fun <T> LifecycleOwner.whenCreated() 
  5. suspend fun <T> LifecycleOwner.whenStarted() 
  6. suspend fun <T> LifecycleOwner.whenResumed() 

可以指定至少在特定的生命周期之后再执行挂起函数,可以进一步减轻 View 层的负担。

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读