在android 系统中提供了临时保存和恢复activity状态和数据的方法
一、onSaveInstanceState()
Activity中的onSaveInstanceState()回调方法用于保存临时数据和状态,这个方法会在activity的onStop()方法
之前调用。在onSaveInstanceState()方法中有个参数Bundle,可以通过,putInt()、putString()等方法传入需要
保存的数据和状态。如下:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("data","temp data");
super.onSaveInstanceState(outState);
}
二、onRestoreInstanceState()
Activity中的onRestoreInstanceState()回调方法用于恢复数据和状态,这个方法会在activity的onstart()
方法之后调用。 在onRestoreInstanceState()方法中有个参数Bundle,bundle会传递到activity的onCreate()
中,所以可以选择在onCreate方法中做数据和状态还原。如下:
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String tempData= savedInstanceState.getString("data");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if( savedInstanceState != null ){
savedInstanceState.getString("anAnt");
}
}
三、onSaveInstanceState() 执行情况
1. 用户按下Home键
2. 用户关闭电源键
3. 用户从最近应用中选择其他的应用
4. 从当前的activity跳到一个新的activity
5. 手机横竖屏切换(不指定configchange属性)
6. 手机系统设置的改变:如语言改变、键盘弹出
四、总结
1.在手机内存不足等原因,actvity未经系统许可异常销毁并且需要重新创建时,onSaveInstanceState()才有会
调用
2.onSaveInstanceState()方法和onRestoreInstanceState()方法不一定”是成对的被调用的
3.onSaveInstanceState()方法调用不确定性,所以只适合保存临时数据, 比如UI控件的状态, 成员变量的值等,
不能用来保存持久化的数据。持久化数据应该当用户离开当前的 activity时,在 onPause() 中保存,比如将数据
保存到数据库或文件中