📌  相关文章
📜  onsaveinstancestate (1)

📅  最后修改于: 2023-12-03 15:18:06.889000             🧑  作者: Mango

介绍 onSavedInstanceState 方法

在 Android 开发中,我们经常需要为应用程序在设备方向或者其他配置发生变化时保存一些重要的数据,以便于在恢复原始状态时可以重新加载这些数据。而 onSaveInstanceState 方法则是为我们提供了一种保存活动状态的机制,以便于在 Activity 重新启动时可以方便地重现上一个状态。

onSaveInstanceState 方法的作用

onSaveInstanceState 方法是在每次 Activity 即将被销毁时调用的,并可以用于保存一些重要的状态数据。当设备配置发生变化时(例如横竖屏切换),Activity 会被销毁并重新创建,而保存在 onSaveInstanceState 中的数据则可以在 Activity 重新创建后被恢复。

如何使用 onSaveInstanceState 方法

要使用 onSaveInstanceState 方法,你需要重写 Activity 中的 onSaveInstanceState 方法,并使用 Bundle 对象保存你想要保存的数据。通常情况下,你可以在 onCreate 方法中检查 savedInstanceState 是否为 null,如果不为 null 则说明当前 Activity 正在被重新创建,此时你需要从 Bundle 中读取并恢复之前保存的状态数据。

下面是一个 onSaveInstanceState 方法的示例代码:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    // 保存一些状态数据
    outState.putString("my_key1", my_value1);
    outState.putInt("my_key2", my_value2);
}

在 onCreate 方法中,你可以检查 savedInstanceState 是否为 null,如果不为 null 则说明当前 Activity 正在被重新创建,此时你需要从 savedInstanceSate 中读取之前保存的状态数据。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // 检查 savedInstanceState 是否为 null
    if (savedInstanceState != null) {
        // 从 savedInstanceState 中读取数据
        my_value1 = savedInstanceState.getString("my_key1");
        my_value2 = savedInstanceState.getInt("my_key2");
    }
}
注意事项
  • onSaveInstanceState 方法中保存的数据必须能够被序列化,否则会出现运行时错误。
  • onSaveInstanceState 方法并不是用来保存/恢复复杂的 UI 状态的最佳方案,如果你需要保存/恢复 ListView、ScrollView 等控件的状态,建议使用 onSaveInstanceState 和 onRestoreInstanceState 方法结合起来使用。
  • 如果你想要为 Activity 显示的 Fragment 保存状态,你需要通过调用 Fragment 的 setArguments 方法并将参数存储到 Bundle 中,然后在 onCreate 方法中通过 getArguments 方法获取这些参数。
  • 如果你需要保存应用程序的状态,并在应用被杀死后仍然能够恢复其状态,建议使用 SharedPreferences 或者将状态数据存储到磁盘上进行持久化。