Android lifecycle ViewModel
規則,viewModel 永遠不應知道 view, ui lifecycle
生命週期長且簡單,當對應的 activity 被銷毀時,框架會自動觸發 onClear

給個情境,用戶輸入了一個字串做搜尋,拿到一個 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
    }
}