保存 Activity 状态之——onSaveInstanceState()
来源:互联网 发布:windows 集群文件系统 编辑:程序博客网 时间:2024/06/06 02:56
写在这之前,先看一下官方文档的描述:
管理 Activity 生命周期的引言部分简要提及,当 Activity 暂停或停止时,Activity 的状态会得到保留。 确实如此,因为当 Activity 暂停或停止时,Activity
对象仍保留在内存中 — 有关其成员和当前状态的所有信息仍处于活动状态。 因此,用户在 Activity 内所做的任何更改都会得到保留,这样一来,当 Activity 返回前台(当它“继续”)时,这些更改仍然存在。
不过,当系统为了恢复内存而销毁某项 Activity 时,Activity
对象也会被销毁,因此系统在继续 Activity 时根本无法让其状态保持完好,而是必须在用户返回 Activity 时重建 Activity
对象。但用户并不知道系统销毁 Activity 后又对其进行了重建,因此他们很可能认为 Activity 状态毫无变化。 在这种情况下,您可以实现另一个回调方法对有关 Activity 状态的信息进行保存,以确保有关 Activity 状态的重要信息得到保留:onSaveInstanceState()
。
系统会先调用 onSaveInstanceState()
,然后再使 Activity 变得易于销毁。系统会向该方法传递一个 Bundle
,您可以在其中使用 putString()
和 putInt()
等方法以名称-值对形式保存有关 Activity 状态的信息。然后,如果系统终止您的应用进程,并且用户返回您的 Activity,则系统会重建该 Activity,并将 Bundle
同时传递给 onCreate()
和 onRestoreInstanceState()
。您可以使用上述任一方法从 Bundle
提取您保存的状态并恢复该 Activity 状态。如果没有状态信息需要恢复,则传递给您的 Bundle
是空值(如果是首次创建该 Activity,就会出现这种情况)。
10-11 10:01:29.827 10128-10128/com.bole.perfect D/debug: -->onCreate
10-11 10:01:29.833 10128-10128/com.bole.perfect D/debug: -->onStart
10-11 10:01:29.835 10128-10128/com.bole.perfect D/debug: -->onResume
横屏
10-11 10:01:32.000 10128-10128/com.bole.perfect D/debug: -->onSaveInstanceState
10-11 10:01:32.004 10128-10128/com.bole.perfect D/debug: -->onStop
10-11 10:01:32.005 10128-10128/com.bole.perfect D/debug: -->onDestroy
10-11 10:01:32.024 10128-10128/com.bole.perfect D/debug: -->onCreate
10-11 10:01:32.031 10128-10128/com.bole.perfect D/debug: -->onStart
10-11 10:01:32.031 10128-10128/com.bole.perfect D/debug: -->onRestoreInstanceState
10-11 10:01:32.033 10128-10128/com.bole.perfect D/debug: -->onResume
重要:在调用 onDestroy 后,该activity中的所有变量都将重置,而布局中的原有值(例如:edittext中的输入值)将会保存(前提是该view设置了 android:id)。
官方文档的说明:
不过,即使您什么都不做,也不实现 onSaveInstanceState()
,Activity
类的 onSaveInstanceState()
默认实现也会恢复部分 Activity 状态。具体地讲,默认实现会为布局中的每个 View
调用相应的 onSaveInstanceState()
方法,让每个视图都能提供有关自身的应保存信息。Android 框架中几乎每个小部件都会根据需要实现此方法,以便在重建 Activity 时自动保存和恢复对 UI 所做的任何可见更改。例如,EditText
小部件保存用户输入的任何文本,CheckBox
小部件保存复选框的选中或未选中状态。您只需为想要保存其状态的每个小部件提供一个唯一的 ID(通过 android:id
属性)。如果小部件没有 ID,则系统无法保存其状态。
注:由于无法保证系统会调用 onSaveInstanceState()
,因此您只应利用它来记录 Activity 的瞬态(UI 的状态)— 切勿使用它来存储持久性数据,而应使用 onPause()
在用户离开 Activity 后存储持久性数据(例如应保存到数据库的数据)。
- 保存 Activity 状态之——onSaveInstanceState()
- onSaveInstanceState()保存Activity状态
- 数据共享之利用onSaveInstanceState()方法保存Activity状态
- 利用onSaveInstanceState()方法保存Activity状态
- 保存activity状态的方法: onSaveInstanceState()
- 学习Activity保存状态的onSaveInstanceState方法
- 利用onSaveInstanceState()方法保存Activity状态
- Activity状态保存【onSaveInstanceState和onRestoreInstanceState】
- 利用onSaveInstanceState()方法保存Activity状态
- android 保存 Activity 状态 ==> onSaveInstanceState()
- Activity 状态保存 OnSaveInstanceState参数解析
- android之生命周期onSaveInstanceState()状态保存
- onSaveInstanceState 非用户销毁Activity时,保存状态
- Activity/View状态保存和恢复 onSaveInstanceState()和onRestoreInstanceState()
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
- android 状态保存onSaveInstanceState
- 3.Unity_CG_Shader光照之——漫反射(lambert模型以及Half lambert模型)
- SpringMVC上传文件进度显示
- arm-none-eabi-gcc编译器的安装和相关配置
- GLSL(着色器语言)
- Device Tree的反编译命令
- 保存 Activity 状态之——onSaveInstanceState()
- Hopper
- 记录贴:configure.properties等propertie文件的读取问题
- HttpClient学习笔记
- 147. Insertion Sort List
- Python中turtle模块画图
- java 定时器
- 关于Idea中右边的maven projects窗口找不到了如何调出来
- 浏览器兼容与BFC详解