Acticity的启动模式

  最近面试有个技术问我Activity的启动模式问题,我当然知道有四个,但是平常使用的都是默认的标准启动模式,其他模式都不熟悉,所以在回答的时候我很坦诚:“sorry,其他的不熟。” 事后就回来问了度娘,看了几篇博客之后,哦,还是不懂,so,写了一个小demo,测试了一下;


首先,设置方式是在Manifest文件里的acticity添加一条属性android:launchMode = "这里设置模式",Android的acticity有始终启动模式,接下来一一记录:

一:standard ,标准模式,也是activcity的默认启动模式,这个就不多说了,估计大家都很熟悉了,大概就是三个activity,A,B,C,从桌面启动程序显示的A,A打开B,B打开C,那么android的任务栈(存放activity)的顺序就是ABC ,C在栈顶,这样只能按返回键两次才能回到A(我晕,我这是在说废话);

二:singleTop栈顶模式,这里我们以实验结果为准,我这里有MainActivity(以下简称M)和BluetoothTestActivity(以下简称B)两个activity,并且在B布局中添加一个button,用来启动自己,实验步骤是启动M,从M激活B(此时B处于任务栈的栈顶),然后B再激活B(此时,我们需要按两次back才嫩回到M),我们通过日志来看M和B的生命周期

然后,在Manifest文件中的B activity添加android:launchMode="singleTop" ,

至此,实验结束,这两个activity的生命周期已经很明显看出区别了在添加了singleTop属性后,B再启动B并不会新建一个Activity,生命周期是onPause,然后onResume,此时B已经把复用了,我们来总结一下,singleTop,如果任务栈的栈顶元素是要被激活的组件,不会创建新的Activity放在任务栈,而是会复用栈顶的Activity。 如果发现栈顶的元素不是要激活的Activity,就会创建新的Activity 放置到任务栈里面。

三:singleTask ,这里的实验场景和上一个一样,只是改变启动模式和在B的跳转,改成跳转到M,我们看下M-B-M的什么周期:

,然后为M添加singleTask模式启动(因为这里我们是要复用任务栈的activity为了效果,选择非栈顶activity),之后的生命周期如下图


可见,M被复用了,startActivity并没有迫使M的onCreate生命周期发生,而是走了onReStart,我们总结一下:SingleTask 操作模式,一般和singleTop操作模式类似,如果他发现任务栈里面(这里并没有栈顶的限制哦)已经有了要启动的这个Activity,他会清空这个Activity所在的任务栈上面的所有Activiy,然后直接复用这个已经存在的Activity ,可以降低内存消耗。

四: singleInstance操作模式会新开启一个任务栈,跟其他普通Activity不是 同一个任务栈,比较任性,他的模式流程是 首先要新开启一个新的任务栈把要激活的Activity放置到新的 任务栈里,这个任务栈里面只有且 只有一个实例,


以上,算是我个人学习中的笔记,不专业,若有帮助,我很感谢,你若感觉有问题,还请指教,我们一起学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值