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

Android开发探索第一章 Activity生命周期及启动模式总结(二)

2016-03-13 10:04 399 查看
Activity的四种启动模式:

standard:系统默认启动方式。每次启动都会重新创建一个新的Activity

singleTop:栈顶复用模式。如果待启动的Activity位于任务栈栈顶,则此Activity不会重新创建,同时回调它的onNewIntent方法,通过这个方法可以取出当前请求信息;如果待启动的Activity已存在但不是栈顶位置,那么新的Activity仍然会被重新创建

singleTask:栈内复用模式。只要Activity在一个栈中存在,那么多次启动该Activity都不会重新创建实例,同时也会回调onNewIntent方法。同时singleTask具有clearTop的效果,它会导致栈内在待启动的Activity之上的所有Activity都被弹出栈。

举几个例子:

case 1: 目前任务栈S1中情况为ABC,这是D以singleTask模式请求启动,其所需任务栈为S2,所以系统会先创建任务栈S2,在创建D并将其放入S2中

case 2:另一种情况,假设D需要S1,其他情况如上,那么D的实例会直接添加到S1中

case 3:D所需S1,S1中情况是CDBA,这是D不会创建新的实例,它会把AB两个Activity弹出栈,栈内情况就变成了CD


singleInstance:单实例模式。一种加强的singleTask模式,它除了具有singleTask所有特性外,还加强了一点,具有该模式的Activity启动时系统会为它创建一个新栈,它只能单独位于一个栈中。

Actiivity的Flags:

大部分情况下我们不需要指定Activity的标记位。有些标记位是系统内部使用的,应用不需要手动设置这些属性以防出现问题。

常用标记位:

FLAG_ACTIVITY_NEW_TASK:为Activity指定“singleTask“启动模式

FLAG_ACTIVITY_SINGLE_TOP:为Activity指定”singleTop”启动模式

FLAG_ACTIVITY_CLEAR_TOP:具有此标记位的Activity,当它启动时,同一任务栈中所有位于它之上的Activity都要被弹出栈。一般和FLAG_ACTIVITY_NEW_TASK配合使用

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有此标记的Activity不会出现在历史Activity列表中。它等同于在XML中指定Activity的属性android:excludeFromRecents=”true”

什么是任务栈???

必须要提到一个参数TaskAffinity,它标识了一个任务栈的名字。默认情况下,所有Activity所需任务栈名字为应用的包名。我们可以为每个Activity单独指定TaskAffinity属性(不能与包名相同)。

TaskAffinity主要与singleTask和allowTaskReparenting属性配合使用,其他情况下没有意义。

具体怎么配合使用可以查阅书籍(P19)或是www.baidu.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: