首页 > 代码库 > 保存和恢复activity的状态数据自己实现

保存和恢复activity的状态数据自己实现

 1 public class DemoActivity extends BaseActivity { 2     private CheckBox cb_gender; 3     private String temp; 4     private Button bt_changeor; 5  6     @Override 7     protected void onCreate(Bundle savedInstanceState) { 8         super.onCreate(savedInstanceState); 9         setContentView(R.layout.a_demo);10         // 如果savedInstanceState为空,则没有调用onSaveInstanceState方法11         if (savedInstanceState == null) {12             UtilsLog.i(TAG, "onCreate : savedInstanceState == null");13         }14         // 如果savedInstanceState不为空,则用户调用onSaveInstanceState方法,并给Bundle赋值了。15         else {16             temp = savedInstanceState.getString("temp");17             UtilsLog.i(TAG, "onCreate : savedInstanceState != null && temp = " + temp);18         }19         initView();20     }21 22     private void initView() {23         bt_changeor = (Button) findViewById(R.id.bt_changeor);24         cb_gender = (CheckBox) findViewById(R.id.cb_gender);25         //26         bt_changeor.setOnClickListener(new OnClickListener() {27 28             @Override29             public void onClick(View v) {30                 if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {31                     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);32                 } else if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {33                     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);34                 }35             }36         });37         cb_gender.setHint("选择");38         cb_gender.setChecked(true);39     }40 41     @Override42     protected void onStart() {43         super.onStart();44     }45 46     @Override47     protected void onRestoreInstanceState(Bundle savedInstanceState) {48         super.onRestoreInstanceState(savedInstanceState);// onStart调用了此方法49         UtilsLog.i(TAG, "onRestoreInstanceState 恢复状态数据 && temp = " + savedInstanceState.getString("temp"));50     }51 52     @Override53     protected void onResume() {54         super.onResume();55     }56 57     // 适合保存UI的状态(Edittext输入的数据,checkbox的选中状态)、成员变量的值。58     @Override59     protected void onSaveInstanceState(Bundle outState) {60         super.onSaveInstanceState(outState);61         /**62          * onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的.63          * 比如用户按下BACK键退出activity时, 用户显然想要关闭这个activity, 此时是没有必要保存数据以供下次恢复的64          */65         UtilsLog.i(TAG, "onSaveInstanceState 保存数据");// 调用顺序 onPasuse -> onSaveInstanceState -> onStop66         /**67          * 当activity再次启动时,这个Bundle会传递给onCreate()方法和随着onStart()68          * 方法调用的onRestoreInstanceState(),<br>69          * 所以它们两个都可以恢复捕获的状态。70          */71         outState.putString("temp", "状态数据");72     }73 74     @Override75     protected void onPause() {76         super.onPause();77         /**78          * onPause()是三个中的第一个,它也是唯一一个在进程被杀死之前必然会调用的方法──onStop() 和 onDestroy()79          * 有可能不被执行。<br>80          * 因此应该用 onPause() 来将所有持久性数据(比如用户的编辑结果)写入存储之中。81          */82     }83 84     @Override85     protected void onStop() {86         super.onStop();87     }88 89     @Override90     protected void onDestroy() {91         super.onDestroy();92     }93 94 }

进入MainsplashActivity界面

 

进入DemoActivity界面

切换activity的屏幕方向

点击返回,到MainSplashActivity