使用 Save Instance State 保留 Android 中的 Activity 状态

使用 Save Instance State 保留 Android 中的 Activity 状态
使用 Save Instance State 保留 Android 中的 Activity 状态

了解活动状态保存

在 Android 中保存 Activity 的状态可能有些令人困惑,尤其是对于刚接触 Android SDK 平台的开发人员而言。此处提供的示例演示了一个简单的应用程序,该应用程序根据用户是第一次打开应用程序还是再次打开应用程序,以不同的方式向用户致意。

但是,当前的实现始终显示初始问候语,无论导航离开应用程序如何。本文将指导您完成使用“onSaveInstanceState”方法正确保存和恢复活动状态的必要步骤。

命令 描述
onSaveInstanceState(Bundle outState) 在销毁 Activity 之前调用此方法以保存 UI 组件的状态。
putString(String key, String value) 将字符串值保存到具有指定键的 Bundle 中以供以后检索。
getString(String key) 使用指定的键从 Bundle 中检索字符串值。
onRestoreInstanceState(Bundle savedInstanceState) 该方法在 onStart() 之后调用,用于从之前保存的 Bundle 恢复 UI 状态。
setContentView(View view) 将活动内容设置为显式视图,使其成为布局的根。
TextView.setText(String text) 设置 TextView 显示的文本。
super.onCreate(Bundle savedInstanceState) 调用超类的 onCreate() 方法,初始化活动。

如何在 Android 中保存 Activity 状态

在提供的脚本中,我们探索如何使用以下方法保存活动的状态 onSaveInstanceState(Bundle outState) Android开发中的方法。第一个脚本演示创建一个显示问候消息的活动,该消息会根据用户是第一次打开应用程序还是离开并返回而变化。该脚本的关键部分涉及保存 TextView 使用 onSaveInstanceState 方法。当 Activity 即将被销毁时,会调用此方法来保存 UI 组件的状态。我们将显示的文本存储在 TextView 使用 putString(String key, String value) 方法,它将字符串值与指定的键关联起来 Bundle

重新创建活动后, onCreate(Bundle savedInstanceState) 方法检查是否存在已保存的实例状态。如果有,它会使用以下命令检索以前存储的文本 getString(String key) 方法并将其设置回 TextView。这确保用户看到的消息与他们离开之前看到的消息相同。在第二个脚本中,我们通过添加 onRestoreInstanceState(Bundle savedInstanceState) 方法,之后调用 onStart() 从之前保存的状态恢复 UI 状态 Bundle。该方法直接将保存的文本设置为 TextView,确保 UI 状态在 Activity 重新启动时保持一致并无缝保留。

在 Android 活动中实现状态保存

Java 安卓开发

package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {
    private TextView mTextView = null;
    private static final String TEXT_VIEW_KEY = "textViewKey";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mTextView = new TextView(this);

        if (savedInstanceState == null) {
            mTextView.setText("Welcome to HelloAndroid!");
        } else {
            mTextView.setText(savedInstanceState.getString(TEXT_VIEW_KEY));
        }
        setContentView(mTextView);
    }

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

确保 Android 应用程序中的数据持久性

Java 安卓开发

package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {
    private TextView mTextView = null;
    private static final String TEXT_VIEW_STATE = "textViewState";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mTextView = new TextView(this);

        if (savedInstanceState != null) {
            mTextView.setText(savedInstanceState.getString(TEXT_VIEW_STATE));
        } else {
            mTextView.setText("Welcome to HelloAndroid!");
        }
        setContentView(mTextView);
    }

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

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        mTextView.setText(savedInstanceState.getString(TEXT_VIEW_STATE));
    }
}

确保配置更改后的状态持久性

开发 Android 应用程序时,在配置更改(例如屏幕旋转)期间管理活动状态至关重要。配置更改会导致活动被销毁并重新创建,如果处理不当,会导致临时 UI 状态丢失。使用 onSaveInstanceState(Bundle outState) 方法中,开发者可以保存必要的UI状态信息。该方法在 Activity 被销毁之前调用,允许开发人员将键值对存储在 Bundle,保留状态以供以后恢复。

此外,了解该角色的作用也很重要。 ViewModel Android 架构组件中的类。 ViewModel 旨在以生命周期意识的方式存储和管理与 UI 相关的数据,使数据能够在配置更改中幸存下来。通过使用 ViewModel,开发人员可以将 UI 控制器与其处理的数据解耦,使应用程序更加健壮且更易于维护。组合 ViewModelonSaveInstanceState 提供了有效管理活动状态的全面解决方案。

有关管理活动状态的常见问题

  1. 目的是什么 onSaveInstanceState
  2. onSaveInstanceState 方法用于在活动被销毁之前保存其当前的 UI 状态。
  3. 如何恢复活动状态?
  4. 您可以在中恢复活动状态 onCreate 方法通过检查savedInstanceState Bundle 并检索存储的值。
  5. 什么是 Bundle
  6. A Bundle 是一个键值对映射,用于在 Activity 之间传递数据并保存 UI 状态。
  7. 的作用是什么 ViewModel 在国家管理中?
  8. ViewModel 以生命周期意识的方式存储 UI 相关数据,在配置更改后仍然存在。
  9. 什么时候 onRestoreInstanceState 叫?
  10. onRestoreInstanceState 之后被调用 onStart() 当活动从之前保存的状态重新初始化时。
  11. 我可以同时使用吗 ViewModelonSaveInstanceState 一起?
  12. 是的,结合 ViewModelonSaveInstanceState 提供了一个强大的解决方案来管理跨配置更改的 UI 状态。
  13. Android 中的配置有哪些变化?
  14. 配置更改包括屏幕旋转、键盘可用性和导致重新创建活动的语言更改。
  15. 如何 putString 工作于 Bundle
  16. putString 将字符串值存储在 Bundle 带有关联的密钥以供以后检索。

Android 状态管理总结

有效管理 Android 活动的状态对于保持流畅的用户体验至关重要,尤其是在配置更改期间。通过利用 onSaveInstanceStateonRestoreInstanceState 方法,开发人员可以确保用户数据和 UI 状态得到无缝保留和恢复。这种方法不仅增强了应用程序的稳定性,还通过提供一致且可靠的界面来提高用户满意度。