保存和恢复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             @Override
29             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     @Override
42     protected void onStart() {
43         super.onStart();
44     }
45 
46     @Override
47     protected void onRestoreInstanceState(Bundle savedInstanceState) {
48         super.onRestoreInstanceState(savedInstanceState);// onStart调用了此方法
49         UtilsLog.i(TAG, "onRestoreInstanceState 恢复状态数据 && temp = " + savedInstanceState.getString("temp"));
50     }
51 
52     @Override
53     protected void onResume() {
54         super.onResume();
55     }
56 
57     // 适合保存UI的状态(Edittext输入的数据,checkbox的选中状态)、成员变量的值。
58     @Override
59     protected void onSaveInstanceState(Bundle outState) {
60         super.onSaveInstanceState(outState);
61         /**
62          * onSaveInstanceState()方法并不是一定会被调用的, 因为有些场景是不需要保存状态数据的.
63          * 比如用户按下BACK键退出activity时, 用户显然想要关闭这个activity, 此时是没有必要保存数据以供下次恢复的
64          */
65         UtilsLog.i(TAG, "onSaveInstanceState 保存数据");// 调用顺序 onPasuse -> onSaveInstanceState -> onStop
66         /**
67          * 当activity再次启动时,这个Bundle会传递给onCreate()方法和随着onStart()
68          * 方法调用的onRestoreInstanceState(),
69 * 所以它们两个都可以恢复捕获的状态。 70 */ 71 outState.putString("temp", "状态数据"); 72 } 73 74 @Override 75 protected void onPause() { 76 super.onPause(); 77 /** 78 * onPause()是三个中的第一个,它也是唯一一个在进程被杀死之前必然会调用的方法──onStop() 和 onDestroy() 79 * 有可能不被执行。
80 * 因此应该用 onPause() 来将所有持久性数据(比如用户的编辑结果)写入存储之中。 81 */ 82 } 83 84 @Override 85 protected void onStop() { 86 super.onStop(); 87 } 88 89 @Override 90 protected void onDestroy() { 91 super.onDestroy(); 92 } 93 94 }

进入MainsplashActivity界面

 

进入DemoActivity界面

保存和恢复activity的状态数据自己实现_第1张图片

切换activity的屏幕方向

保存和恢复activity的状态数据自己实现_第2张图片

点击返回,到MainSplashActivity

保存和恢复activity的状态数据自己实现_第3张图片

转载于:https://www.cnblogs.com/wangziqiang/p/3863608.html

你可能感兴趣的:(ui)