加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

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

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

看下代码你就应该明白了,还是熟悉的那一套。当 ViewModel.onCleared() 被调用的时候,viewModelScope 会自动取消作用域内的所有协程。使用示例如下:

  1. fun getMessageByViewModel() { 
  2.  viewModelScope.launch { 
  3.  val deferred = async(Dispatchers.IO) { getMessage("ViewModel Ktx") } 
  4.  mMessage.value = deferred.await() 
  5.  } 

写到这里,viewModelScope 是能满足需求的最简写法了。实际上,写完全篇,viewModelScope 仍然是我认为的最好的选择。

LiveData

Kotlin 同样为 LiveData 赋予了直接使用协程的能力。添加如下依赖:

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

直接在 liveData {} 代码块中调用需要异步执行的挂起函数,并调用 emit() 函数发送处理结果。示例代码如下所示:

  1. val mResult: LiveData<String> = liveData { 
  2.  val string = getMessage("LiveData Ktx") 
  3.  emit(string) 

你可能会好奇这里好像并没有任何的显示调用,那么,liveData 代码块是在什么执行的呢?当 LiveData 进入 active 状态时,liveData{ } 会自动执行。当 LiveData 进入 inactive 状态时,经过一个可配置的 timeout 之后会自动取消。如果它在完成之前就取消了,当 LiveData 再次 active 的时候会重新运行。如果上一次运行成功结束了,就不会再重新运行。也就是说只有自动取消的 liveData{ } 可以重新运行。其他原因(比如 CancelationException)导致的取消也不会重新运行。

(编辑:西安站长网)

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

热点阅读