根据 onSaveInstanceState 的文档:
默认实现负责处理大多数 UI 每个实例的状态
和 onRestoreInstanceState:
此方法的默认实现会恢复以前冻结的任何视图状态
我不确定这到底是什么意思。这是否意味着在被杀死并现在恢复后返回时,显示给用户的 UI 屏幕会自动恢复其所有数据?如果是这样,我没有看到。除非我自己 setContentView,否则我得到的只是一个空屏幕。
我误解了意思吗?
根据 onSaveInstanceState 的文档:
默认实现负责处理大多数 UI 每个实例的状态
和 onRestoreInstanceState:
此方法的默认实现会恢复以前冻结的任何视图状态
我不确定这到底是什么意思。这是否意味着在被杀死并现在恢复后返回时,显示给用户的 UI 屏幕会自动恢复其所有数据?如果是这样,我没有看到。除非我自己 setContentView,否则我得到的只是一个空屏幕。
我误解了意思吗?
默认实现将适用于每个定义了 id 的小部件。例如,如果您有一个 EditText,并且您将提供其 id,那么当 Activity 由于方向和相同而被杀死时,系统将保存其值,并在重新创建 Activity 时恢复 EditText 值。
编辑
如果您有一个基本布局,并且如果您在视图层次结构中动态添加一些视图,那么您将必须自己处理保存状态并恢复状态。同样,当您的活动将被重新创建时,将调用活动的 onCreate() 方法,因此在此方法中首先设置您正在创建和动态添加的所有添加视图,然后您可以根据您的意图检查额外的参数正在进入 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");
}
}