当点击home键或程序运行过程中突然来电话等意外情况或屏幕方向改变时,会调用onSaveInstanceState()方法进行保存数据到手机硬盘上,再次运行Activity时则调用onRestoreInstanceState()方法从硬盘中取出以保存的数据。也可从onCreate()方法中的bundle对象中取数据:

  1. public void onCreate(Bundle savedInstanceState)
  2. {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.main);
  5. txt=(EditText)findViewById(R.id.txt);
  6. if (null!=savedInstanceState&&savedInstanceState.containsKey(CONTENT))
  7. {
  8. txt.setText(savedInstanceState.getString(CONTENT));
  9. }
  10. secondBtn=(Button)findViewById(R.id.secondBtn);
  11. secondBtn.setOnClickListener(listener);
  12. Log.i(TAG, "MainActivity-->onCreate");
  13. }
onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
另外,当屏幕的方向发生了改变, Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法,如下:
  1. public class PreferencesActivity extends Activity {
  2. private String name;
  3. protected void onRestoreInstanceState(Bundle savedInstanceState) {
  4. name = savedInstanceState.getString("name"); //被重新创建后恢复缓存的数据
  5. super.onRestoreInstanceState(savedInstanceState);
  6. }
  7. protected void onSaveInstanceState(Bundle outState) {
  8. outState.putString("name", "liming");//被摧毁前缓存一些数据
  9. super.onSaveInstanceState(outState);
  10. }
  11. }

当Activity重新创建时,会先执行onCreate()方法,再执行onRestoreInstanceState()方法,也可以在onCreate()方法中取数据

使用Activity默认的Shared Preference,也可以保存数据。
 如果需要单击返回按钮退出程序后,下次进入仍然可以保留数据,可以在onPause()方法中设置共享参数,实际是将数据保存在系统的xml文件中

  1. protected void onPause(){
  2. super.onPause();
  3. //SharedPreferences uiState = getPreferences(0);
  4. //SharedPreferences.Editor editor = uiState.edit();
  5. //editor.putString(TEXT_ENTRY_KEY, myEditText.getText().toString());
  6. //editor.putBoolean(ADDING_ITEM_KEY, addingNew);
  7. //editor.commit();// Commit the preferences.
  8. //或:
  9. this.getPreferences(MODE_PRIVATE).edit().putString(TEXT_ENTRY_KEY, myEditText.getText().toString());
  10. }

在onResume()方法中取数据

  1. protected void onResume(){
  2. super.onResume();
  3. this.getPreferences(MODE_PRIVATE).edit().getString(TEXT_ENTRY_KEY,…………
  4. }
注意:如果系统中有两个Activity,一个处于暂停状态,一个处于停止状态,当内存不足时,系统会首先杀死停止状态的Activity

转载于:https://blog.51cto.com/dreamboy/723871

Activity的状态保存相关推荐

  1. Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)...

    一.什么是Activity? 简单的说:Activity就是布满整个窗体或者悬浮于其它窗体上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Ac ...

  2. Activity详细解释(生命周期、以各种方式启动Activity、状态保存,等完全退出)...

    一.什么是Activity? 简单的说:Activity或者悬浮于其它窗体上的交互界面. 在一个应用程序中通常由多个Activity构成.都会在Manifest.xml中指定一个主的Activity, ...

  3. Android Activity中状态保存机制

    在Activity中保存用户的当前操作状态,如输入框中的文本,一般情况下载按了home键后,重新进入文本框中的东西会丢下,所以我们要保存当前页面信息,如在写短信的时候接到一个电话,那么当你接电话的时候 ...

  4. Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

    Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...

  5. android 自动恢复,Android的状态保存和恢复

    Activity的状态保存和恢复 Activity的状态什么时候需要保存和恢复 Activity的销毁一般分为两种情况: 当用户按返回按钮或你的Activity通过调用finish()销毁时,这属于正 ...

  6. 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析

    作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简介 1. 状态保存方法示例 p ...

  7. 保存Activity的状态

    如果你想保存Activity的信息(例如,类实例的变量)而又不需要和其它的组件共享的话,你可以调用Activity的getPreferences方法,不用指定一个Preference的名字.对返回的S ...

  8. 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析

    作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简单介绍 1. 状态保存方法演示 ...

  9. Activity 生命周期与状态保存

    看API的时候,零零散散的记录下来的,看完了总算对Activity的生命周期有了一个全面的了解.相信会对大家有些帮助的. onCreate->onRestart->onStart-> ...

最新文章

  1. java学习笔记-4.7
  2. NHibernate学习系列一
  3. 【C/C++】运算结果出现1.#Q0问题分析
  4. python web开发 JavaScript基础
  5. java数据库配置_java--数据库(文件配置连接,自定义连接池)
  6. RTT线程管理篇——rtt线程恢复
  7. 登录或连接MYSLQ 提示 error 1045 access denied for user 'root@127.0.0.1' 错误
  8. AIX 系统下做 rootvg
  9. Enabled AWE
  10. mysql 总分区表限制_MySQL分区表的局限和限制详解
  11. 人工智能 企业变革_我们如何利用(人工)情报变革医院的运营管理
  12. 如何快速搭建一套完整的网络直播平台
  13. mysql tmp mysql.sock_MySQL搭建过程中的“/tmp/mysql.sock错误解决
  14. 微信公众平台配置——URL、Token和JS安全域名
  15. 老子研究文献知识发现数据竞赛
  16. luoguP1888 【三角函数】
  17. FMDB - 数据库操作
  18. 打击标题党 详述清风算法
  19. Linux网络基础之DNS服务
  20. kylin(麒麟)系统高分率字体小解决方案

热门文章

  1. oracle_plseq客户端中文乱码
  2. mysql 添加时间戳列
  3. NSIS 打包 win7 中无法删除快捷方式
  4. php安全性差,PHP安全性防范方式
  5. python3高级语法:__slots__属性、property装饰器、上下文管理协议、__new__方法
  6. php 返回查询结果某个字段
  7. 深入理解 Java 内存模型(转载)
  8. 一维循环数组最大子数组求解
  9. CentOS 7 上安装 redis3.2.3安装与配置
  10. 两个单体内置对象_Global和Math