android - onSaveInstanceState/onRestoreInstanceState 和 View 状态

标签 android android-activity savestate

根据onSaveInstanceState的文档:

The default implementation takes care of most of the UI per-instance state

和 onRestoreInstanceState:

The default implementation of this method performs a restore of any view state that had previously been frozen

我不确定这到底是什么意思。 这是否意味着在被杀死并现在恢复后返回时,显示给用户的 UI 屏幕会自动恢复其所有数据? 如果是这样,我没有看到。 除非我自己设置内容 View ,否则我得到的只是一个空屏幕。

我是不是理解错了?

最佳答案

默认实现将适用于定义了 id 的每个小部件。 例如,如果您有一个 EditText 并且您将提供它的 ID,那么系统将在 Activity 因方向和相同而被杀死时保存它的值,并在重新创建 Activity 时恢复 EditText 值。

编辑

如果您有一个基本布局,并且如果您要在 View 层次结构中动态添加一些 View ,那么您将不得不自己处理保存状态和恢复状态。同样,当您的 Activity 将被重新创建时, Activity 的 onCreate() 方法将被调用,因此在此方法中首先设置您正在创建和动态添加的所有添加 View ,然后您可以根据您的 Intent 检查额外参数正在进入 onCreate() 方法。此额外参数与您在 onSaveInstanceState 方法中添加额外参数完全相同。

所以像下面这样实现。

int x = 10;
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("x", x);
}

并且在 onCreate 方法中,您可以获得如下所示的 x 参数

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.xxx);

    if(savedInstanceState.containsKey("x")) {
        x = savedInstanceState.getInt("x");
    }
}

关于android - onSaveInstanceState/onRestoreInstanceState 和 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13356342/

相关文章:

android - 在 Android 上重新启动 Activity 的最佳方式?

android - 使用 Activity 实例保存游标状态?

android - 回调 hell : Sequencing RESTful Volley requests? RxAndroid?

java - 在 Android 中使用 Room 和 RxJava 链接多个网络调用和数据库插入

Android:使用 admob 在 WebView 中阻止 Adsense 广告

android - 从 expo 连接时的 Windows 防火墙问题

android - 如何在未调用 onDestroy() 时清除状态栏通知?

android - 如何延迟从另一个 Activity 调用 Activity ?

c# - 保存游戏状态的最佳方法是什么?

python - 保存和加载类实例