当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被系统摧毁, 此时内存中就不会存有该activity的实例对象了。 如果之后这个activity重新回到前台, 之前所作的改变就会消失。 为了避免此种情况的发生, 开发者可以覆写onSaveInstanceState()方法。onSaveInstanceState()方法接受一个Bundle类型的参数, 开发者可以将状态数据存储到这个Bundle对象中, 这样即使activity被系统摧毁, 当用户重新启动这个activity而调用它的onCreate()方法时, 上述的Bundle对象会作为实参传递给onCreate()方法, 开发者可以从Bundle对象中取出保存的数据, 然后利用这些数据将activity恢复到被摧毁之前的状态。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 从savedInstanceState中恢复数据, 如果没有数据需要恢复savedInstanceState为null
if (savedInstanceState != null) {
String info = savedInstanceState.getString("info") ;
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// 将数据保存到outState对象中, 该对象会在重建activity时传递给onCreate方法
super.onSaveInstanceState(outState);
outState.putString("info","===================");
}
需要注意的是, onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的。 比如用户按下BACK键退出activity时, 用户显然想要关闭这个activity, 此时是没有必要保存数据以供下次恢复的, 也就是onSaveInstanceState()方法不会被调用。 如果调用onSaveInstanceState()方法, 调用将发生在onPause()或onStop()方法之前。