onSaveInstanceState用法

xzbxzb 安卓 2025-11-09 168 0
Android 开发中用于保存组件(如 Activity、Fragment)状态的关键逻辑,主要作用是在组件因系统原因(如屏幕旋转、内存不足被销毁)即将销毁时,保存临时数据,以便后续组件重建时恢复状态。

具体目的

在 Android 中,当 Activity/Fragment 因系统配置变化(如屏幕旋转、语言切换)或内存不足被销毁时,系统会先调用onSaveInstanceState方法,允许开发者将需要保留的临时数据(如用户输入的文本、列表滚动位置等)存入Bundle对象中。待组件重建时(如旋转后重新创建 Activity),这些数据会被传递给新的组件实例,从而恢复到销毁前的状态。

代码解析

  1. 重写onSaveInstanceState方法onSaveInstanceState是 Activity/Fragment 生命周期中的一个回调方法,由系统在组件即将被销毁(且可能重建)时自动调用。这里用override重写该方法,以自定义保存逻辑。

  2. 调用父类方法super.onSaveInstanceState(outState)必须调用,目的是让父类(如Activity)保存其自身的默认状态(如视图树的状态),避免父类状态丢失。

  3. 存储数据到BundleoutState.putString("inputText", inputText)表示将变量inputText(假设是用户输入的文本)以键值对形式存入Bundle对象outState中(键为"inputText",值为inputText的内容)。Bundle类似一个键值对容器,支持存储基本数据类型(如intString)、序列化对象等。

用法场景

通常与恢复状态的逻辑配合使用,例如在onCreateonRestoreInstanceState中读取Bundle中的数据并恢复 UI:
// 在Activity重建时恢复数据
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // 检查是否有保存的状态数据
    if (savedInstanceState != null) {
        // 从Bundle中取出之前保存的inputText
        inputText = savedInstanceState.getString("inputText", "")
        // 恢复UI(如将文本设置到输入框)
        editText.setText(inputText)
    }
}

注意事项

  • 仅用于保存临时状态(如用户输入、滚动位置),不适合存储大量数据(Bundle有大小限制)。

  • 当用户主动销毁组件(如按返回键)时,系统不会调用该方法。

  • 存储的数据需可序列化(基本类型、StringParcelable等),否则会抛出异常。


 您阅读本篇文章共花了: 

版权声明

本文章如果涉及侵权,请联系我。
部分文章系本人原创未经许可,不得转载。

喜欢0发布评论

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址