Val*_*kov 4 android android-livedata android-viewmodel android-architecture-components kotlin-coroutines
viewModelScope用于将协程生命周期绑定到ViewModel生命周期。liveData构建器创建一个LiveData运行协程的 ,其生命周期与状态绑定LiveData,因此,当LiveData不活动时,协程会在超时后取消。由于超时,协程不会在配置更改时被取消。
如果我在 a 内创建一个LiveDatavia构建器,并观察到,生命周期已经绑定到生命周期。我还应该将其传递给构建者吗?我认为我不应该,但在 Android 文档示例之一中它通过了:liveDataViewModelLiveDataActivityLiveDataActivityviewModelScope.coroutineContextliveData
class MyViewModel: ViewModel() {
private val userId: LiveData<String> = MutableLiveData()
val user = userId.switchMap { id ->
liveData(context = viewModelScope.coroutineContext + Dispatchers.IO) {
emit(database.loadUserById(id))
}
}
}
Run Code Online (Sandbox Code Playgroud)
Q: LiveData生命周期已经和Activity生命周期绑定了。我应该把它交给建筑viewModelScope商吗liveData?
在简单的情况下,当一个 Activity 只有一个时ViewModel,Activity生命周期与生命周期相同,并且无论您是否ViewModel将“viewModelScope”传递给构建器,它都不应该改变任何内容。lifeData但在更复杂的情况下,例如,当在片段之间ViewModel 共享时Fragment,生命周期可能与共享ViewModel生命周期不匹配,在这种情况下,在“viewModelScope.coroutineContext”中启动协程是有意义的。
因此,您可以用来viewModelScope为您的liveData构建器提供上下文。
为什么?
根据官方文档: A
ViewModelScope是为您的应用程序中的每个定义的ViewModel。如果清除,在此范围内启动的任何协程都会自动取消。ViewModel
因此,它有助于取消您当前的工作LiveData,因为它现在绑定到您的ViewModelScope.
此外,如果您正在计算布局的一些数据,则viewModelScope很有帮助,您应该将工作范围限制为,以便在清除 时,工作会自动取消以避免消耗资源。ViewModelViewModel
| 归档时间: |
|
| 查看次数: |
2495 次 |
| 最近记录: |