首页 > 代码库 > 保存和恢复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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。