文档章节

状态保存

LoopMsg
 LoopMsg
发布于 2017/07/06 15:59
字数 674
阅读 2
收藏 0
点赞 0
评论 0

先看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方法会在什么时候被执行,有这么几种情况:


1、当用户按下HOME键时。

这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则
2、长按HOME键,选择运行其他的程序时。
3、按下电源按键(关闭屏幕显示)时。
4、从activity A中启动一个新的activity时。
5、屏幕方向切换时,例如从竖屏切换到横屏时。

在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。

至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行
另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原。

© 著作权归作者所有

共有 人打赏支持
LoopMsg
粉丝 2
博文 1
码字总数 674
作品 0
武汉
我理解的--java备忘录模式

备忘录模式是可以恢复之前行为的模式,你错误的写了一个单词,需要修改,就要后退,先把之前的单词保存起来,要恢复的时候就取出来把现在的覆盖掉。步骤是;状态--》保存--》变化--》恢复---...

刘新全
2016/04/06
98
0
Android Activity---保存Activity的状态

在介绍管理Activity生命周期一节中简单的提到,Activity被暂停或终止时,它的状态是被保留的。确实,因为Activity被暂停或终止时它依然被保留在内存中---所有的关于它的成员和当前状态的信息...

长平狐
2012/10/16
1K
0
企业应用架构模式学习(六):会话状态

业务事务和系统事务的区别引起了选择使用无状态会话还是有状态会话的辩论,最基本的问题应该落到无状态和有状态服务器系统背后的技术问题上。 无状态的价值 当前我们的web系统基本都是无状态...

大风起兮
2013/05/28
0
0
Gof设计模式之备忘录模式 (Memento)

备忘录模式定义:备忘录是一个对象,它保存另一个对象在某一时刻的状态。 备忘录模式功能:在不破坏对象的封装性的前提下,保存对象的某一时刻的内部状态。 不破坏封装性,即不暴露对象不必要...

andy8712
2012/01/05
0
0
RESTful 的 token 放在哪里好?

据说REST是无状态的,并不是指不保存用户的状态(我们这里就假如指用户登录的Token吧),而是指这个状态由谁保存。如果是用Session存储在Server端,那么就是有状态的,如果每次请求的时候浏览...

公孙二狗
2015/04/13
4.5K
11
android-关于对save与restore的理解

在所有之前,我们先了解一下,官方文档对这两个函数的解释。 save() Subsequent calls to translate,scale,rotate,skew,concat or clipRect,clipPath will all operate as usual, but when t......

pointerException
2015/07/30
0
0
Handling Orientation Change in Android

默认情况下,横竖屏切换时 Android 会销毁当前 然后重启它。这时某些运行时状态可能会丢失,因此我们要根据我们的需求防止这些状态的丢失。Android 给我们提供了两种选择: 将这些状态保存到...

xandeer
2017/11/01
0
0
iOS开发那些事--iOS6 UI状态保持和恢复

iOS设计规范中要求,当应用退出的时候(包括被终止运行时候),画面中UI元素状态需要保持的,当再次进来的时候看状态与退出是一样的。iOS6之后苹果提供以下API使得UI状态保持和恢复变得很容易...

长平狐
2013/03/19
682
0
Windows Phone开发(9):关于页面状态

按照一般做法,刚学会如何导航,还是不够的,因为要知道,手机里面的每个页面,就如同Web页面一样,是无状态的。 啥是无状态?如果我们玩过Web开发就明白了,当你在当前页面输入一些内容,然...

junwong
2012/04/18
377
0
保存状态 之 fragment

通过Activity的onRetainNonConfigurationInstance()方法来保存一些状态信息。现在有了Fragment之后,可以更加方便的保存状态。 通过setRetainInstance()方法来确定是否让fragment保存状态。注...

广阔
2012/06/23
0
4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
34分钟前
13
0
流利阅读笔记30-20180719待学习

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
36分钟前
1
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
50分钟前
6
1
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
今天
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
9
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部