在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()方法時數據就會被恢復。