在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle) (传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。这个方法在一个activity被杀死前调用,当该activity在将来某个时刻回来时可以恢复其先前状态。
那么我是怎么使用这两个方法来保存我想要的数据呢?看一下代码:
/**
* 保存状态
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
String json_user = JSONUtils.toJson(Constants.USER); //把要保存的静态全局变量先转成Json
outState.putString("json_user", json_user);
super.onSaveInstanceState(outState);
}
/**
* 恢复数据
* @param savedInstanceState
*/
public void resaveInstanceState(Bundle savedInstanceState){
if (savedInstanceState == null) {
return;
}
String json_user = savedInstanceState.getString("json_user");
if(json_user != null && !json_user.equals("")){
Constants.USER = JSONUtils.fromJson(json_user, User.class);
}
}
然后很重要的一个步骤是在 onCreate方法中初始化 resaveInstanceState(savedInstanceState)这个方法,这个方法是自定义的方法。
@Override
protected void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
super.onCreate(savedInstanceState);
resaveInstanceState(savedInstanceState);
init();
}
如果使用Activity中onRestoreInstanceState(Bundle savedInstanceState) 方法有个弊端是,每次恢复数据前是先onCreate()Activity 的,所以对于我们遇到的问题还是没有解决,如果想要用封装好的方法,又要修改很多数据,给需要恢复数据的地方放个默认值。当调用onRestoreInstanceState(Bundle savedInstanceState)方法后再刷新页面。
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
}
所以用了自定义的方法自定义方法也有个弊端,就是当activity调用onPause()方法时数据就会被恢复。