Activity深入学习(1)生命周期
来源:互联网 发布:苹果电脑删除mac系统 编辑:程序博客网 时间:2024/05/24 02:00
一、活动的生命周期图
各个生命周期的回调流程:
在Training中,拿金字塔举例,又有了下面的生命周期金字塔,和上图配合更有利于我们理解活动的生命周期。
有一点注意就是从暂停到可见,回调onPause到onResume
从停止到可见,过程就复杂了许多:
目前看到的已包括onStoped----onRestart----onstart------onResume。(还有一些saveInstance,看到了在总结下)
停止的话有点复杂,里面需要处理的逻辑很多啊。但是有一点要注意,就是onStopped不一定保证被调用,所以对于
一些用户数据保存,要在onPause中进行。(saveInstance干嘛?)
二、正确处理生命周期的重要性
三、保存活动的状态
如果系统不销毁我们的活动,好多东西系统都会帮我们保存,比如view只要指定id就会保存状态,但是对于持久化信息,我们必须在
onPause调用的时候保存。当然有时候,系统为了省内存,会把我们的活动销毁,然后用户返回的时候要重建,那么我们就要用到
onSaveInstanceState(),流程见下图:
我们可以在onSaveInstanceState()中使用Bundle,调用putString和putInt保存数据。当系统重新创建活动的时候,会把这个
Bundle传递给OnCreate或者RestoreInstanceState方法,这就是我们看到OnCreate方法接收一个Bundle参数,就是这个,用来恢复
活动被杀死保存的数据。遗嘱啊,先人的遗言,后辈要谨遵记住。
注意:不保证onSaveInstanceState()的调用,如果用户使用返回按钮,明显去关闭这个活动,可能就不用保存了,用户自己关的。
如果系统调用,在onStop之前,可能在onPause之后,跟onPause的不确定。因此,这个方法只适合临时数据,如果要保存持久化数据,
一定要用onPause。
默认onSaveInstanceState()的实现会帮我们保存,比如View对应的方法,只要指定id就可以。
如果我们非要重写
onSaveInstanceState(),上来一定先调用父类的
onSaveInstanceState(),然后在是自己的。
同理,onRestoreInstanceState。
onSaveInstanceState()和onPause、onStop的区别
onPause在活动被放到后台或者要销毁时肯定会调用,onStop在销毁前调用。如果用户是从活动B返回到A,那么B在销毁的时候
就没有必要调用onSaveInstanceState(),B被显式销毁(这个导航的问题还要学习),系统避免调用这个方法,但是这种情况B
是会调用onPause和onStop的。
。另一个例子,如果B在A前面,但是A在B生命周期不会被杀死,也没必要调用,这时候onPause被onSaveInstanceState()是为了重启用的,如果只有onPause和OnStop,那么重新创建活动的话,参数如何传递?所
以,onSaveInstanceState()存在的最大意义就是活动重建的时候,按照上次死的遗言,恢复一些东西,没有就算了。
onPause或者onStop是有些东西必须在这个活动的生命周期干完,比如要见一个人,我死之前必须见,不然死了之后见不着了。
- Activity深入学习(1)生命周期
- 深入学习Activity生命周期
- Activity深入学习(2)生命周期方法介绍
- Android:Activity学习(1) 生命周期
- Android 学习总结 Activity(1)-Activity的生命周期
- 深入理解Activity生命周期(二)
- activity生命周期深入理解
- 深入理解Activity 生命周期
- 学习笔记1: Activity 生命周期
- Activity学习(一):生命周期
- 深入学习横竖屏切换时候Activity的生命周期
- 深入学习activity之不同情况的生命周期
- 学习笔记之一:深入理解Activity的生命周期
- 深入理解Android Activity生命周期
- Activity生命周期深入理解2
- 深入理解Activity的生命周期
- activity的生命周期深入理解
- 深入了解Activity-生命周期
- JAVA邮件发送的简单实现
- 《java入门第一季》之面向对象(继承)
- Javascript函数----操作DOM文档对象模型
- 13个大数据应用案例
- Node.js express NPM start error, Exit Status 8
- Activity深入学习(1)生命周期
- 卡特兰数
- android:ViewPager自动轮播图(简单版)
- 用PHP将网页上的Canvas图像保存到服务器上的方法
- LeetCode 256. Paint House
- IOS消息定时推送(JAVAWEB)
- 489 - Hangman Judge
- LeetCode 017 Letter Combinations of a Phone Number
- HTML5新特性之Geolocation