Android 的启动模式

Android的启动模式

在前一篇Blog中我们了解到了Android的Activity管理机制—任务, 通过任务管理Activity的堆栈的时候我们会碰到一些与Activity启动行为有关的问题, 比如, 当某个Activity直接启动自身的时候, 它的行为是怎样的, 当某个Activity启动位于栈内的其他Activity的时候, 它的行为是怎样的, Android为我们提供了这些行为的管理机制. 通过在Mainifest.xml文件中使用launchMode指定Activity的启动模式, 我们可以指定Activity在启动时的行为.

launchMode可以取以下的值:

“standard”: 标准模式, 在这种模式下, 每次启动Activity都会创建一个新的实例, 可以重复多次在同一个Activity上启动它自己. 每个任务可以包含多个实例,各个实例也可以属于不同的任务. 这也是Android的默认模式. 一句总结就是”自由创建Activity”.

“singleTop”: 在标准模式下重复启动同一个Activity会产生多份实例, 通常这样的行为并不是我们期待看到的. singleTop模式就是为了解决这样的场景而设计, singleTop模式下当一个Activity已经位于栈顶的时候, 重复创建该Activity不会创建新的实例, 而是调用该Activity的onNewIntent()方法. 但是重复创建非栈顶的实例的时候, 它的行为与standard模式是一样的. 比如当栈内的Activity排列顺序为”A-B-C”, 在singleTop模式下再创建C的时候, 并不会变成”A-B-C-C”, 而是依然是”A-B-C”, 但是会调用一次C的onNewIntent()方法. 如果创建B的话, 那么与standard模式一样, 会变成”A-B-C-B”. 该模式同样可以创建多份实例, 各实例也可以属于不同的Task, 但是栈顶的实例不能是多份并且相邻的. 总结起来就是”栈顶的Activity不会多次重复启动”.

“singleTask”: 这是较为复杂的一种启动方式.singleTask只能有一个实例存在. 默认情况下, singleTask在栈顶的时候, 跟singleTop类似, 因为这东西只能有一个实例, 所以不会重复创建, 当它不在栈顶的时候(堆栈中间或者底部), 启动一个singleTask的Activity会让位于该Activity之上的所有Activity出栈. 比如栈内的Activity排列顺序是”A-B-C-D”, 并且B是singleTask模式. 那么此时再由栈顶的D启动B的时候, 并非像前两种一样变成”A-B-C-D-B”, 而是C, D出栈变成”A-B”.

“singleInstance”: 与singleTask类似的, 这种模式下, 也是只能存在唯一一份实例.不同的是, 这份实例必须自己独自位于一个任务之中.

 

除了在Mainifest.xml里面指定Activity的启动模式, 我们还可以使用Intent的FLAG参数来指定它. Intent的参数FLAG可以取下列值:

FLAG_ACTIVITY_NEW_TASK: 该模式与singleTask行为相同.

FLAG_ACTIVITY_SINGLE_TOP: 该模式与singleTop模式行为相同.

FLAG_ACTIVITY_CLEAR_TOP: 该模式没有对应的LaunchMode,指定通过该模式启动的Activity, 如果堆栈中已经存在该Activity, 则不会新建, 而是使在该Activity实例之上的其他Activity出栈, 并且调用该Activity的onNewIntent()方法. 


参考:http://developer.android.com/guide/components/tasks-and-back-stack.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值