【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 { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
} @Override
protected 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 easy被销毁的时候调用, 注意是easy被销毁, 也可能没有销毁就调用了;
-- 按下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 { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null)
System.out.println("onCreate() : " + savedInstanceState.getString("octopus"));
} @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
System.out.println("onRestoreInstanceState() : " + savedInstanceState.getString("octopus"));
} @Override
protected 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. 状态保存方法示例 p ...
 - Android学习总结——Activity状态保存和恢复
		
Android中启动一个Activity如果点击Home键该Activity是不会被销毁的,但是当进行某些操作时某些数据就会丢失,如下: Java class: package com.king.ac ...
 - Python命令行选项參数解析策略
		
概述 在Python的项目开发过程中,我们有时须要为程序提供一些能够通过命令行进行调用的接口.只是,并非直接使用 command + 当前文件 就ok的,我们须要对其设置可选的各种各样的操作类型.所以 ...
 - 百度URL參数解析
		
百度URL參数解析 在用Python爬取百度搜索的内容时,发现百度搜索的url非常的长.往往会跟一大段的參数,但事实上非常多參数都是没有必要的,如相同是搜索javakeyword,能够通过 http: ...
 - linux kernel的cmdline參数解析原理分析
		
利用工作之便,今天研究了kernel下cmdline參数解析过程.记录在此.与大家共享.转载请注明出处.谢谢. Kernel 版本:3.4.55 Kernel启动时会解析cmdline,然后依据这些參 ...
 - activity状态保存的bundl对象存放位置的思考
		
我们知道,当activity被异常终止时,可以把一些信息保存到bundle对象中,在下次启动时恢复. 那么,这个bundle对象是保存在哪里的呢? 这种状态保存的方法针对的是activity而不是进程 ...
 - struts开发<struts中的參数传递.三>
		
不说废话,直接上干货 1.通过set和get传递參数 添加username 和password两个属性并添加set和get方法 package fzl.user.struts.demo; import ...
 - cmake函数參数解析
		
近期在迁移公司的make系统到cmake上.发现cmake的function參数非常奇怪.比如,假设我们向一个function传递list作为參数,在function中,形參会变成例如以下状况: se ...
 - python 命令行參数解析
		
本文是从我还有一个博客转载过来的,欢迎大家点击进去看一下,帮我添加点人气^_^ ImPyy 选择模块 依据python參考手冊的提示,optparse 已经废弃,应使用 argparse 教程 概念 ...
 
随机推荐
- dp和px,那些不得不吐槽的故事——Android平台图
			
http://blog.sina.com.cn/s/blog_6499f8f101014ipq.html 一个优秀的手机软件,不仅要有精巧的功能,流畅的速度,让人赏心悦目的UI也往往是用户选择的重要理 ...
 - linux下进程相关操作
			
一.定义和理解 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动. 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的 ...
 - poj3254
			
还是那句老话:dp关键在状态: 求有多少种排布方式,是任意两头牛不相邻(有些地方不能放): 不用心,一开始还纠结了半天 和之前USACO上某题方法是一样的,每一行放或不放只有两种情况 把它当作一个二进 ...
 - UVa 12096 (STL) The SetStack Computer
			
题意: 有一个集合栈计算机,栈中的元素全部是集合,还有一些相关的操作.输出每次操作后栈顶集合元素的个数. 分析: 这个题感觉有点抽象,集合还能套集合,倒是和题中配的套娃那个图很贴切. 把集合映射成ID ...
 - BZOJ2150: 部落战争
			
题解: 把每个点拆成入点和出点,因为必须经过一次且只能经过一次.所以在两个点之间连一条上界=下界=1的边. 然后再s到每个入点连边,每个出点向t连边,点与点之间... 求最小流就可以过了... (感觉 ...
 - apache开源项目--solr
			
solr 名称来源 Search On Lucene Replication solr 基本概况 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言 ...
 - Java [leetcode 16] 3Sum Closest
			
题目描述: Given an array S of n integers, find three integers in S such that the sum is closest to a giv ...
 - TortoiseGit连接github不用每次输入用户名和密码的方法
			
每次git clone 和push 都要输入用户名和密码.虽然安全,但在本机上每次都输有些麻烦,如何记住用户名和密码呢? 当你配置好git后,在C:\Documents and Settings\Ad ...
 - Parallel stepped for loops in .NET C# z
			
; i < ; i += ) public IEnumerable<int> SteppedIntegerList(int startIndex, int endEndex, int ...
 - 《Python基础教程(第二版)》学习笔记 -> 第六章 抽象
			
抽象和结构 本章将会介绍如何让将语句组织成函数,还会详细介绍参数(parameter)和作用域(scope)的概念,以及递归的概念及其在程序中的用途. 创建函数 函数可以调用,它执行某种行为,并返回某 ...