我的学习笔记1-activity生命周期说

一、activity生命周期介绍

相信大家都对android activity的生命周期有一定的了解了,其实一图足以说明:


如图:onStart.onStop方法对应后台是否可见,onResume.onPause对应是否位于前台,正常流程只有onResume后,activity才是可见可交互的,在此有个有趣的问题就是当activity A启动activity B时,那么他们的流程是怎么样的,其实应该是先调用A的onPause方法,然后调用B的onCreate、onStart、onResume,最后再调用A的onStop方法,不信大家可以写个例子自己验证下打个日志就清楚了。

二、在异常情况下生命周期的分析

1.activity被异常杀死后重新启动的情况

此种情况大部分是横竖屏切换的情况,在此情况下,activity会被销毁然后重新创建,这种情况下首先会回调onSaveInstanceState方法,此方法回调时在onStop方法之前回调,把系统的状态和数据进行保存,我们也可以在这个方法做些处理,安卓里面默认的view是已经实现了此方法。onSavaInstanceState方法保存数据的一些流程是先activity数据托管给当前window,window再托管给当前根布局DecorView,然后在一层一层分发给下面的view进行保存数据,实行分发机制。

保存数据后我们一般会通过onRestoreInstanceState方法恢复里面的数据,此方法回调时期是在onStart方法之后,我们也可以在此方法做判断进行数据恢复操作,其实在onCreate方法中也可以恢复数据,但是onCreate的如果是正常启动则数据没有,所以需要做个非空判断,但一般建议在onRestoreInstanceState方法中去恢复数据。

2.当系统内存不足回收activity的情况

前台activity:优先级最高

可见但非前台activity:如activity弹出一个窗口,此时窗口背后的activity可见但是不可交互,优先级低

后台activity:优先级最低,最容易被kill掉

其中一样回调onSaveInstanceState和onRestoreInstanceState方法,跟上面描述的一样

三、activity的启动模式

1.standard:最基本的模式,启动始终重新启动一个activity,默认是这种模式

2.singleTop:栈顶模式,当启动的activity正好位于栈顶时,则不重新启动activity,只是回调其中的onNewIntent方法,如ABC启动c时,此时任务栈内一样ABC

3.singleTask:此模式比较特殊,如果指定新的任务栈,那么会重新启动一个任务栈并把activity压入栈内,如果存在此任务栈并存在此activity,那么根据栈内复用特性,会直接把栈内的activity掉至栈顶,其上面的界面也会被clear掉,如ABCD启动A,则栈内只有A,其他的被清出任务栈

4.singInstance:单实例模式,这中是singleTask的加强版,就是新建一个任务栈,然后把activity压入栈入。

设置任务的属性为taskAffinity="xxxx.xx.xx"即可

在此要说说设置启动activity的形式,可以在Androidmanifest.xml里面设置,也可以代码设置如setFlag(FLAG_ACTIVITY_NEW_TASK),代码设置的优先级要更高,如果同时设置以代码设置为准。在此说下四种常用的标志的作用:

1.FLAG_ACTIVITY_NEW_TASK:此类似设置了singTask启动模式

2.FLAG_ACTIVITY_SINGLE_TOP:此类似设置了singleTop启动模式

3.FLAG_ACTIVITY_CLEAR_TOP:此一般配合FLAG_ACTIVITY_NEW_TASK配合使用,这个时候如果已经存在,那么只会回调该activity的onNewIntent方法;如果新启动的activity是standard模式,那么会清除它自己以及它自己之上的所有界面后重新建一个activity。

4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:设置后此activity不会出现在activity列表栏中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值