Android 生命週期 - SavingState

在ui中保存状态

tags: Android

doc

viewState

只要有 id ,就可以自动保存到 onSaveInstanceState,不用做额外处理

SavedState

对于类别内部分变数,希望可以在旋转或被 os 杀死后仍然恢复状态,可用 onSaveInstanceState,但仅是用少量数据

override fun onSaveInstanceState(outState: Bundle) {    super.onSaveInstanceState(outState)    outState.putBoolean(IS_EDITING_KEY, isEditing)    outState.putString(RANDOM_GOOD_DEED_KEY, randomGoodDeed)}override fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    isEditing = savedInstanceState?.getBoolean(IS_EDITING_KEY, false)    randomGoodDeed = savedInstanceState?.getString(RANDOM_GOOD_DEED_KEY)            ?: viewModel.generateRandomGoodDeed()}

onConfig

交给 viewModel

权责分离 SavedStateRegistry

和 DefaultLifecycleObserver 相似,将生命週期相关的操作,由各类别进行实作,以减少 activity 和 fragment 里的代码,提高覆用和内聚性

class SearchManager(registryOwner: SavedStateRegistryOwner) : SavedStateRegistry.SavedStateProvider {    companion object {        private const val PROVIDER = "search_manager"        private const val QUERY = "query"    }    private val query: String? = null    init {        // Register a LifecycleObserver for when the Lifecycle hits ON_CREATE        registryOwner.lifecycle.addObserver(LifecycleEventObserver { _, event ->            if (event == Lifecycle.Event.ON_CREATE) {                val registry = registryOwner.savedStateRegistry                // Register this object for future calls to saveState()                registry.registerSavedStateProvider(PROVIDER, this)                // Get the previously saved state and restore it                val state = registry.consumeRestoredStateForKey(PROVIDER)                // Apply the previously saved state                query = state?.getString(QUERY)            }        }    }    override fun saveState(): Bundle {        return bundleOf(QUERY to query)    }    ...}class SearchFragment : Fragment() {    private var searchManager = SearchManager(this)    ...}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章