您的位置:首页 > 移动开发 > Android开发

聊聊Android的四种启动模式

2018-04-03 17:34 225 查看

聊聊Android的四种启动模式

在说启动模式前先说一些名词:


栈的概念

栈(Stack)是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素.”先进后出”或”后进先出”就是栈的一大特点,先进入栈的元素总是要等到后进入栈的元素出栈以后才能出栈.递归就是利用到了系统栈
4000
,暂时保存临时结果,对临时结果进行保护.

栈的基本操作:压栈、弹栈

任务栈的概念

Task简单的说就是一组以栈的模式聚集在一起的Activity组件集合,类似于一个填充了Activity的容器,最先加入的Activity会处于容器最下面,最后加入的处于容器最上面,而从Task中取出Activity时是从最顶端先取出,最后取出的是最开始添加Activity,这就是后进先出模式,而Activity在Task中的顺序是可以控制的,在Activity跳转时用到Intent Flag可以设置新建activity的创建方式。


1,四种启动模式

1,standard   默认的启动模式
2,singleTop  需要创建的Activity已经处于任务栈中时,复用此Activity
3, singleTask 需要创建的Activity已经处于任务栈中时,弹出此Activity上的其他Activity ,让其处于栈顶。
4,singleInstance 全局单例模式,只要整个系统中创建此Activity的实例,不再创建。


2,启动模式的实现方式:

1,设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置Android:launchMode属性
2, 通过设置FLAG
`Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.startActivity(intent);`


3,启动模式的实际应用场景

此时有A B C 三个Activity
1,如果A,B,C,都是standard的启动模式
1)先启动A ,再启动B  ,然后启动C  这个时候任务栈里是 A->B->C  .C位于栈顶。
2)此时再启动B ,任务栈里是 A->B->C->B  他们会依次累加
2,如果A ,B,D是standard模式,C是singleTop模式
第一种情况
1)先启动A ,再启动B  ,然后启动C  这个时候任务栈里是 A->B->C  .C位于栈顶。
2)如果此时再启动C,任务栈里是A->B->C  ,但是会调用C 的onNewIntent()方法。

第二种情况
1)先启动A ,再启动B  ,然后启动C ,再启动D, 这个时候任务栈里是 A->B->C->D  . D位于栈顶。
2)如果此时再启动C,任务栈里是A->B->C->D->C

(这就是说,只有C在栈顶的时候,再次启动C 的时候,他的SingleTop才有效果,否则,它跟 默认的启动模式没什么区别。)
3,如果A,B,D是standard模式,C是singleTast模式
1)先启动A ,再启动B  ,然后启动C ,再启动D, 这个时候任务栈里是 A->B->C->D  . D位于栈顶。
2)如果此时再次启动C,任务栈里面是A->B->C
singleTask在同一个任务栈里只允许有一个实例。因为在任务栈里已经有了他的实例,他会把她之上的Activity  onDestroy()掉,让自己处于栈顶
4,singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。


总结:

四种启动模式其实很简单,需要消化的就是singleTop 和singleTask的区别。
你只要记住两句话:
1,singleTop 是只有在栈顶的时候才复用
2,singleTask 是在栈内才复用   这四种启动模式就算掌握了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息