当前位置:首页 > 未命名 > 正文内容

Activity生命周期与启动模式

u3blog8年前 (2016-03-14)未命名223

生命周期

Activity的生命周期相信大家都烂熟于胸了,总结起来可以用一张图片概括 这其中又分为两种情况,正常启动和异常启动

正常启动

沿着上图中的中轴线的启动方式,是最经典的启动方式,就无需多言了

一个问题,onStart onResume, onPause onStop 看起来差不多,它们有什么区别呢

区别在于,前者都是从是否可见的角度来进行的生命周期调用,而后者都是从是否位于前台的角度来看的, 可以根据这个区别在不同的周期回掉里做不同的处理。

异常情况

主要的是activity在后台被杀死后的重启过程,如果没有特殊设置的话,在被杀死之前,会调用onSaveInstanceState来保存一些状态,比如文本框文字等 在启动过后,会调用onRestyoreInstanceState来恢复之前保存的状态信息。 当我们在manifest中设置了onconfigchange属性的时候,在结束之前,会调用onConfigrationChanged来进行状态保存,那么我们就可以通过对onConfigCHnage属性的配置来针对不同情况下做出不同的状态保存了。

Activity的启动模式

提到启动模式,无非就是经典的几种 stand 标准模式 singleTask 只会在任务栈里存在一个,如果已经有了,会将上部的任务全部出栈 singleTop 如果栈顶没有,就新建,如果有,就不新建 singleInstance 新开一个任务栈,将这个任务入栈

TaskAffinity属性

这是一个比较难理解的属性,大概可以认为是,亲和性,当一个任务被新建的时候,如果这个属性设置了另一个任务栈的包名,那么它会被盖到那个任务栈上去,成为其中的一部分。 具体可以看这一篇文章 关于TaskAffinity属性的作用

在代码中通过FLAG设置Activity的启动方式

不仅可以通过在manifest中配置launch_mode来设置启动模式,还可以在代码中通过FLAG来设置,当然,代码设置的优先级是比配置文件更低的。 常用的FLAG有这么几个 FLAG_ACTIVITY_NEW_TASK 对应singletask FLAG_ACTIVITY_SINGLE_TOP 对应singleTop FLAG_ACTIVITY_CLEAR_TOP 对应singletask FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 比较特殊,可以让activity在recent app界面(一般是按菜单键弹出的那个界面)不可见

关于ACTION和CATEGORY的匹配规则

简单的说,ACTION必须要有,而category可以没有因为系统会自动给没有的加上一个DEFAULT的category。

扫描二维码推送至手机访问。

版权声明:本文由u3blog发布,如需转载请注明出处。

本文链接:https://u3blog.xyz/?id=280

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。