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都被弹出栈。
举几个例子:
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
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
相关文章推荐
- Android界面性能调优手册
- 【Android】解决Genymotion下载设备失败的方法(Connection Timeout)
- Android Studio 使用NDK编程调用第三方动态库问题记录
- android中handler用法总结
- Android Activity的生命周期以及用法建议
- Android程序各个模块的简单分析
- Android开发探索第一章 Activity生命周期及启动模式总结(一)
- android布局
- 2016年3月13日 第一次周记
- Android开发者必备的42个链接
- Android模拟器-Genymotion的下载和添加Android虚拟系统
- Android Studio 光标切换 从黑框切换成普通的光标 (竖条的光标)
- Android通用布局UniversalLayout
- 【Android】20.4 录音
- 【Android】20.3 拍照和视频录制
- 实现计时器的几种方式
- aapt 解析android apk
- Android基础-TextView用法
- Android N 多窗口模式,你需要知道的一切
- Android中定时器Timer和TimerTask的启动,停止,暂停,继续等操作实例