保存和恢复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(),<br>
69          * 所以它们两个都可以恢复捕获的状态。
70          */
71         outState.putString("temp", "状态数据");
72     }
73 
74     @Override
75     protected void onPause() {
76         super.onPause();
77         /**
78          * onPause()是三个中的第一个,它也是唯一一个在进程被杀死之前必然会调用的方法──onStop() 和 onDestroy()
79          * 有可能不被执行。<br>
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的屏幕方向

点击返回,到MainSplashActivity

posted @ 2014-07-23 17:45  王自强  阅读(380)  评论(0编辑  收藏  举报