【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析
作者 : 韩曙亮
转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083
一. 相关方法简介
1. 状态保存方法示例
package com.example.octopus_saveinstance;import android.app.Activity;
import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);}}
2. 相关方法介绍
(1) onCreate(Bundle savedInstanceState) 方法
Activity 创建时回调 : 该方法会自动传入一个 Bundle 对象, 该 Bundle 对象就是上次被系统销毁时在 onSaveInstanceState 或者 onRestoreInstanceState 中保存的数据;
-- 注意 : 只有是系统自动回收的时候才会保存 Bundle 对象数据;
-- Bundle 对象来源 : onCreate() 方法中的 Bundle 对象参数, 是在 onSaveInstance() 或者 onRestoreInstanceState() 方法中保存的 Bundle 对象;
.
(2) onSaveInstanceState(Bundle outState) 方法
outState 参数作用 :
-- 数据保存 : Activity 声明周期结束的时候, 需要保存 Activity 状态的时候, 会将要保存的数据使用键值对的形式 保存在 Bundle 对象中;
-- 恢复数据 : 在 Activity 的 onCreate()方法 创建 Activity 的时候会传入一个 Bundle 对象, 这个 Bundle 对象就是这个 outState 参数;
调用时机 : Activity 容易被销毁的时候调用, 注意是容易被销毁, 也可能没有销毁就调用了;
-- 按下Home键 : Activity 进入了后台, 此时会调用该方法;
-- 按下电源键 : 屏幕关闭, Activity 进入后台;
-- 启动其它 Activity : Activity 被压入了任务栈的栈底;
-- 横竖屏切换 : 会销毁当前 Activity 并重新创建;
onSaveInstanceState方法调用注意事项 :
-- 用户主动销毁不会调用 : 当用户点击回退键 或者 调用了 finish() 方法, 不会调用该方法;
-- 调用时机不固定 : 该方法一定是在 onStop() 方法之前调用, 但是不确定是在 onPause() 方法之前 还是 之后调用;
-- 布局中组件状态存储 : 每个组件都 实现了 onSaveInstance() 方法, 在调用函数的时候, 会自动保存组件的状态, 注意, 只有有 id 的组件才会保存;
-- 关于默认的 super.onSaveInstanceState(outState) : 该默认的方法是实现 组件状态保存的;
(3) onRestoreInstanceState(Bundle savedInstanceState) 方法
方法回调时机 : 在 Activity 被系统销毁之后 恢复 Activity 时被调用, 只有销毁了之后重建的时候才调用, 如果内存充足, 系统没有销毁这个 Activity, 就不需要调用;
-- Bundle 对象传递 : 该方法保存的 Bundle 对象在 Activity 恢复的时候也会通过参数传递到 onCreate() 方法中;
-- 位于生命周期位置吧 : 该方法在 onResume() 方法之前保存信息;
二 代码示例
Activity 主要代码 :
package com.example.octopus_saveinstance;import android.app.Activity;
import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if(savedInstanceState != null)System.out.println("onCreate() : " + savedInstanceState.getString("octopus"));}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);System.out.println("onRestoreInstanceState() : " + savedInstanceState.getString("octopus"));}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString("octopus", "www.octopus.org.cn");System.out.println("onSaveInstanceState() : save date www.octopus.org.cn");}}
运行结果 : 在运行的过程中 旋转屏幕;
I/System.out( 8167): onSaveInstanceState() : save date www.octopus.org.cn
I/System.out( 8167): onCreate() : www.octopus.org.cn
I/System.out( 8167): onRestoreInstanceState() : www.octopus.org.cn
作者 : 韩曙亮
转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083
【Android 应用开发】Activity 状态保存 OnSaveInstanceState参数解析相关推荐
- 【Android 应用开发】Activity 状态保存 OnSaveInstanceState參数解析
作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38297083 一. 相关方法简单介绍 1. 状态保存方法演示 ...
- activity状态保存的bundl对象存放位置的思考
我们知道,当activity被异常终止时,可以把一些信息保存到bundle对象中,在下次启动时恢复. 那么,这个bundle对象是保存在哪里的呢? 这种状态保存的方法针对的是activity而不是进程 ...
- 【Android 多媒体开发】 MediaPlayer 状态机 接口 方法 解析
作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38487967 一. MediaPlayer 状态机 介绍 ...
- android应用开发-从设计到实现 4-10 解析天气预报数据
解析天气预报数据 界面布局完成以后,就需要设计代码来控制界面上各个元素的逻辑了. 从网络获取天气预报数据: 解析获取的数据: 根据解析的结果更新天气预报界面: 天气预报的数据依赖于网络端的服务器,不是 ...
- Android 系统开发_四大组件篇 -- Service 解析(用法)
开篇 服务是什么? 服务(Service)是 Android 中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还需要长期进行的任务.服务的运行不依赖于任何用户界面,即使程序被切换 ...
- Android 应用开发(32)--工程相关解析(各种文件,资源访问)
工程相关解析(各种文件,资源访问) 1.工程项目结构解析: 我们开发大部分时间都花在下面这个部分上: 接下来我们对关键部分进行讲解: java:我们写Java代码的地方,业务功能都在这里实现 res: ...
- Unity3d开发(15)AudioClip 参数解析
https://gameinstitute.qq.com/community/detail/120009 Audio Clip AudioClip 面板有很多参数,设置起来容易出错,这里就给大家解析下 ...
- Android初级开发(九)——网络交互—解析XML格式数据
一.前言 首先我们先搭建一个web服务器,我这里用的是tomcat,搭建过程可参见tomacat服务器的搭建:http://blog.csdn.net/qq_28585471/article/deta ...
- Android初级开发(九)——网络交互—解析JSON格式数据
一.前言 首先还是在web服务器(我这里用的是tomcat)新建json文本 文本内容 在浏览器上预览一下 二.JSONObject方法 1.我们还是在OkHttp的基础上修改代码,布局不变 Main ...
最新文章
- maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令
- 图解ZooKeeper!小学生也能看懂!
- 牛客练习赛24题解(搜索,DP)
- 浅谈BPM和SOA架构下的电子政务系统
- SAP Spartacus简介
- Java描述设计模式(11):观察者模式
- 独家 | 腾讯无人车首次曝光,还把车子开上了四环
- QtCreator中导入“.lib(.a)”和“.dll(.so)”文件的方法
- mysql 5.6批处理慢_java – JDBC批处理执行速度极慢
- VueRouter进阶(1)-导航守卫
- asp在线html编辑器,ASP下使用FCKeditor在线编辑器的方法
- 视频采集站-免费视频资源采集工具-免费视频资源网采集
- 捍卫者usb管理控制系统_捍卫效用优先CSS
- RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘
- 微信h5分享图标没有展示
- TL民营医院奖金分配方案比较研究
- [ARC101E]Ribbons on Tree
- 技术干货|昇思MindSpore 1.5版本中的亲和算法库——MindSpore Boost
- Object.keys()、Object.values()、Object.entries()的用法
- JAD 文件的中文问题