返回

使用 onSaveInstanceState() 方法巧妙保存 Activity 状态,应对暂停与销毁

Android

使用 onSaveInstanceState() 方法保存 Activity 状态

在 Android 开发中,您经常需要在 Activity 暂停或销毁时保存其状态,以避免在 Activity 重新创建时丢失重要数据。onSaveInstanceState() 方法是一种强大且简单的工具,可让您实现此目标。

什么是 onSaveInstanceState()?

onSaveInstanceState() 是一种回调方法,当 Activity 暂停或销毁时,系统会自动调用它。该方法允许您保存需要在 Activity 重新创建时保留的状态。

如何使用 onSaveInstanceState()?

要使用 onSaveInstanceState(),请按照以下步骤操作:

  • 在您的 Activity 类中,覆盖 onSaveInstanceState() 方法。
  • 在该方法中,创建一个 Bundle 对象来存储您的状态值。
  • 将每个状态值作为键值对添加到 Bundle 中。

示例代码:

以下示例展示了如何使用 onSaveInstanceState() 保存文本视图的状态:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("savedText", mTextView.getText().toString());
}

恢复已保存的状态

当 Activity 重新创建时,您可以通过以下方法之一恢复已保存的状态:

  • 在 onCreate() 方法中恢复状态:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        String savedText = savedInstanceState.getString("savedText");
        mTextView.setText(savedText);
    }
}
  • 在 onRestoreInstanceState() 方法中恢复状态:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState != null) {
        String savedText = savedInstanceState.getString("savedText");
        mTextView.setText(savedText);
    }
}

注意事项:

  • onSaveInstanceState() 仅在 Activity 暂停或销毁时调用,因此如果您在 Activity 处于活动状态时更新状态,这些更新将不会保存。
  • onSaveInstanceState() 中保存的数据不会跨进程或设备持久化。
  • 避免保存大量数据,因为这会影响 Activity 的性能。

常见问题解答

1. 什么时候应该使用 onSaveInstanceState()?

在需要在 Activity 暂停或销毁后保留其状态时。

2. 为什么 onSaveInstanceState() 仅在 Activity 暂停或销毁时调用?

因为 onSaveInstanceState() 的目的是在 Activity 不可见或被销毁时保留状态。

3. 除了文本视图之外,我还能保存哪些其他类型的数据?

任何可序列化的数据,例如字符串、数字、列表和对象。

4. 如果我更新了 onSaveInstanceState() 中保存的数据,这些更新会在 Activity 重新创建时生效吗?

否, onSaveInstanceState() 中保存的数据仅在 Activity 暂停或销毁后有效。

5. 我是否可以在 onSaveInstanceState() 中保存大量数据?

不建议,因为这会影响 Activity 的性能。相反,请考虑使用持久化解决方案,例如 SharedPreferences 或数据库。