ViewModel lifecycle
tags: Android
lifecycle
ViewModel
viewModel
规则,viewModel 永远不应知道 view, ui lifecycle
生命週期
生命週期长且简单,当对应的 activity 被销毁时,框架会自动触发 onClear
保存状态 saveStateHandler
给个情境,用户输入了一个字串做搜寻,拿到一个 list,如果都不做处理,当 os 砍掉应用的时候,用户回来会看到初始画面
而我们可以透过 room 和 saveStateHandler 去保存状态,在 viewModel 保存字串,并视情况在 process 结束,用户再次回到应用时,将字串在 viewModel 重新读出,并向 Model 发出,以获得 room 或是 api 资料
:::info
contains(String key) - 检查是否存在给定键的值。
remove(String key) - 移除给定键的值。
keys() - 返回 SavedStateHandle 中包含的所有键。
:::
class SavedStateViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() { val filteredData: LiveData<List<String>> = savedStateHandle.getLiveData<String>("query").switchMap { query -> repository.getFilteredData(query) } fun setQuery(query: String) { savedStateHandle["query"] = query } //or val filteredData: StateFlow<List<String>> = savedStateHandle.getStateFlow<String>("query") .flatMapLatest { query -> repository.getFilteredData(query) } fun setQuery(query: String) { savedStateHandle["query"] = query }}