首先要在app的build.gradle
加入:
dependencies {
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.4.0-alpha03")
}
ViewModel scope
、liveData & emit()
、switchMap
、emitSource
这是在ViewModel
中最方便使用coroutine
(协程)的方式之一,
使用viewModelScope来执行耗时工程时,
会随着ViewModel
被清除而自动取消。
使用方式:
class MyViewModel : ViewModel() {
init {
viewModelScope.launch {
//做某些事 例如callApi
callApi()
}
}
}
以往我们在更新LiveData
时,在ViewModel
中的做法为:
//没有liveData KTX的写法
class MyViewModel : ViewModel() {
private val _result = MutableLiveData<String>()
val result: LiveData<String> = _result
init {
viewModelScope.launch {
val apiResult = callApi()
_result.value = apiResult
}
}
}
使用方式:
//KTX写法
class MyViewModel : ViewModel() {
val result = liveData {
emit(callApi())
}
}
这方式可以直接取得immutable(不可变的) LiveData
,
并透过emit
提交改变。
比以前的_result.value = apiResult
或_result.postValue(apiResult)
,
更为简单明了。
觉得写法上变的简单很多> <
当我们需要在LiveData
发生变化後,启动coroutine
(协程)时,会使用switchMap
。
例如:当你需要在得到使用者登入得到token
後,刷新首面的api
。
使用Transformations.switchMap十分方便:
private val token = MutableLiveData<String>()
//得到token时才执行
val result = token.switchMap { token ->
liveData { emit(reloadHomePageApi(token)) }
}
result
是一个immutable LiveData
。
在每次token
更新时,result
会得到一个在执行完reloadHomePageApi(token)
後,
回传的新资料。
使用时机是:当你需要先行提交初始化value,
等成功呼叫後再回传一次值时。
(使用频率较小)。
使用方式:
liveData(Dispatchers.IO) {
emit(LOADING_STRING)
emitSource(dataSource.fetchWeather())
}
在这边一样只简单列出几个常用的方法,
如果有兴趣研究更多可以看看官网的介绍喔。
参考:
<<: 能够滑起来的UICollectionView Day9
>>: [Day11] 排版的小孩子才做选择 ~ Grid 跟 Flex 我全都要!
现在有不少的软件会有一个特殊的版本叫Nightly,从字面上的意思就可以得知是指每个晚上发行的版本,...
我还记得我学Git的时候,开始查Git是什麽,最开始出现的是下面这个画面,一堆原型的球球在上面,有的...
七段显示器显示距离 ( TM1637 + 超音波 ) 教学原文参考:七段显示器显示距离 ( TM16...
Filter 在海量的数据中如果想要快速找到特定关键字的资料,我们需要filter这个很实用的功能...
(今日内容将有数学式,请谨慎服用) 今天要介绍的主角,可以说他是影响模型输出结果以及训练过程中最大的...