Activity的onSaveInstanceState和onRestoreInstanceState触发的时机
转自:http://www.cnblogs.com/heiguy/archive/2010/10/30/1865239.html
1.原文
先看Application Fundamentals上的一段话:
Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system,but does not bother calling it when the instance is actually being destroyed by a user action (such as pressing the BACK key)
从这句话可以知道,当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。
注意上面的双引号,何为“容易”?言下之意就是该activity还没有被销毁,而仅仅是一种可能性。这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清楚地知道当某个activity(假定为activity A)显示在当前task的最上层时,其onSaveInstanceState方法会在什么时候被执行。
2.几种情况
- 当用户按下HOME键时。
 
这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则
- 长按HOME键,选择运行其他的程序时。
 - 按下电源按键(关闭屏幕显示)时。
 - 从activity A中启动一个新的activity时。
 - 屏幕方向切换时,例如从竖屏切换到横屏时。
 
在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行
3.重要原则
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。
至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行
另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原.
Activity的onSaveInstanceState和onRestoreInstanceState触发的时机的更多相关文章
- Android学习基础之onSaveInstanceState和onRestoreInstanceState触发的时机
		
先看Application Fundamentals上的一段话: Android calls onSaveInstanceState() before the activity becomes ...
 - onSaveInstanceState和onRestoreInstanceState触发的时机
		
先看Application Fundamentals上的一段话: Android calls onSaveInstanceState() before the activity becomes vul ...
 - Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法:
		
Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法: 1. 基本作用: Activity的 onSaveInstan ...
 - Activity的onSaveInstanceState()和onRestoreInstanceState()方法
		
首先Android的Activity生命周期如下图: Activity的onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,他们不同于onC ...
 - Activity的onSaveInstanceState()和onRestoreInstanceState()以及API详解
		
为了弄清楚onSaveInstanceState()方法和onRestoreInstanceState()方法,我翻译一下谷歌的API,翻译如下: There are a few scenarios ...
 - Android 中onSaveInstanceState和onRestoreInstanceState学习
		
1. 基本作用: Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPaus ...
 - onSaveInstanceState()   和     onRestoreInstanceState()
		
本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用 ...
 - onSaveInstanceState()和onRestoreInstanceState()方法
		
Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPause()等生命周期方 ...
 - Android  onSaveInstanceState和onRestoreInstanceState()
		
首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() .关于这两个方法,一些朋友可能在Android开发过程中很少用到,但在有时候掌握其用法会帮我 ...
 
随机推荐
- LeetCode 67 Add Binary(二进制相加)(*)
			
翻译 给定两个二进制字符串,返回它们的和(也是二进制字符串). 比如, a = "11" b = "1" 返回 "100". 原文 Give ...
 - 深入浅出AOP(一)
			
动态代理实现AOP: AOP事实上非常早之前依照做出来了一些东西,之所以不敢说做出来了.是由于它是什么?怎么实现?做出来的东西是不是?先前一直查资料.查到的资料跟着做.到后来发现,AOP越来越大,而非 ...
 - 一个bug在redmine中的诞生到终结
			
1.測试员測试出bug,跟踪状态为支持,状态为新建,指派给产品经理. 2.产品经理鉴定确觉得bug.改动跟踪状态为bug.指派给技术经理: 3.技术经理收到bug,指派给开发者: 4.开发者收到bug ...
 - c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量?   c# dynamic动态类型和匿名类  详解C# 匿名对象(匿名类型)、var、动态类型 dynamic  深入浅析C#中的var和dynamic
			
比如有一个匿名对象,var result =......Select( a=>new { id=a.id, name=a.name});然后Object obj = result ;我怎 ...
 - 在 Ubuntu 开启 GO 程序编译之旅
			
本文将使用 putty 连接到一台阿里云 Ubuntu 16.04 服务器,在其上安装 go 语言的编译环境,旨在呈现从安装到"你好,世界!"涉及的方方面面,希望完成这个过程无须觅 ...
 - Java-ReentrantReadWriteLock的简单样例
			
内容:读锁时共享的.写锁时相互排斥的(可见执行结果).都是通过AQS实现的. public class ReentrantReadWriteLockTest { static class MyObje ...
 - 他人第三方库在linux上的安装
			
1.下载tar.gz等压缩包 2.解压 3.安装 4.确保路径
 - QT学习笔记(一)——ui的认识
			
////////////2015/08/06/////////////////// ///////////by xbw////////////////////////// //////////环境 Q ...
 - Linux上ln命令详细说明及软链接和硬链接的区别
			
硬链接(hard link) UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,我们称这种机制为链接.它可以使得单个程序对同一文件使用不同的名字.这样的好处是文件系 统只存在一个文件的副本, ...
 - set  去重 会 破坏 原有list 的元素相对位置
			
feature_reduce_l = [i if re.search('\d', i) is None else i[0:re.search('\d', i).endpos - 1] for i in ...