onSaveInstanceState和onRestoreInstanceState触发的时机

onRestoreInstanceState什么时候使用? 主要介绍onRestoreInstanceStateonCreate的区别   onRestoreInstanceState(Bundle savedInstanceState)只有在activity被系统回收或是销毁的时候.重新创建activity的情况下才会被调用。   onDestroy -> onCreate -> onStart -> onRestoreIns... 阅读详情

转自http://www.cnblogs.com/heiguy/archive/2010/10/30/1865239.html

一般还是在onPause()方法里面保存数据,在onResume()里面提取数据比较保险。

先看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方法中做数据还原


onSaveInstanceStateonRestoreInstanceState何时执行? Android为我们提供了onSaveInstanceState(Bundle outState)onRestoreInstanceState(Bundle savedInstanceState)用于保存恢复数据。一、onSaveInstanceState(Bundle outState)在什么时机会被调用呢? 答案是当activity有可能被系统回收的情况下,而且是在onStop()之前。注... 阅读详情

相关推荐

Android:onSavedInstanceState()onRestoreInstanceState()被调用的场景及其作用

文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warning

qjyws的博客 3635

onSaveInstanceState()onRestoreInstanceState()

onSaveInstanceState(Bundle outState)在什么时机会被调用?  onSaveInstanceState(Bundle outState)会在以下情况被调用:  1、按下HOME键时。  2、从recent中选择运行其他的程序时。  3、按下power键时。  4、一个activity启动一个另一个activity时。  5、屏幕方向切换时。 onRestoreI...

xiangkezhu的博客 302

onSaveInstanceState()onRestoreInstanceState()使用详解

背景 如果系统由于系统约束(而不是正常的应用程序行为)而破坏了Activity,那么尽管实际 Activity实例已经消失,但是系统还是会记住它已经存在,这样如果用户导航回到它,系统会创建一个新的实例的Activity使用一组保存的数据来描述Activity在被销毁时的状态。系统用于恢复以前状态的已保存数据称为“实例状态”,是存储在Bundle对象中的键值对的集合。 解决 onSaveInstan...

weixin_34327761的博客 379

onSaveInstanceStateonRestoreInstanceState触发时机

从这句话可以知道,当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。 注意上面的双引号,何为“容易”?言下之意就是该activity还没有被销毁,而仅仅是一种可能性。这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onS

wangguolin66的博客 347

Android onSaveInstanceStateonRestoreInstanceState触发时机

先看Application Fundamentals上的一段话: Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the sy...

176

安卓onSaveInstanceStateonRestoreInstanceState触发时机

简要介绍 很多介绍安卓生命周期的文章,都没有介绍到onSaveInstanceStateonRestoreInstanceState这两个函数,本文专门来介绍一下。 onSaveInstanceState onSaveInstanceState按照官方解释,是当activity被临时销毁时才执行的。 原文:invoked when the activity may be temporarily...

蓝不蓝编程 990
上一篇: 来讲讲Git这个玩意到底该怎么用?
下一篇: Android Fragment 基本介绍
superjunjin
博客等级 码龄17年 600粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值