深入学习Activity之启动模式
2016-06-19 14:09
399 查看
1.activity的启动模式
默认的启动模式,每次都需要创建新的实例,有些需求默认启动模式不能满足要求,所以需要不同的启动模式。四种启动模式
1.standard,默认模式每次启动都会创建新的activity实例不管是否存在或者是否在栈顶,A 启动了B activity,那么B就会进入A所在的任务栈中,如果使用全局的ApplicationContext去启动activity就会出错,因为没有指定启动activity的任务栈,需要添加Flag_activity_new_task 标记。
2.singleTop 栈顶复用模式
如果被启动的activity已经处于任务栈的栈顶那么就不会创建该activity,也不会执行activity的生命周期,二回调用onNewIntent()方法,可以通过该方法,获得启动的intent
3.singleTask 栈内复用模式,比较复杂的模式
被启动的activity A如果为singletask模式,那么启动它时,
系统会找是否有栈是 ==A需要的栈==,如果有这样的栈那么查找A是否在栈中,
如果在栈中和singletop类似,调用其onNewIntent(),同时将其移到栈顶 如果有栈但不存在A的实例,则创建实例A
如果没有这样的栈,则创建栈和activity实例,压入栈中。
4.singleInstance,加强版的singleTask
被启动的activity,系统会为其创建新的task栈,后续的启动都不会创建新的activity了。singletask是查找是否有activity 需要的栈,复用栈,没有在创建栈。
A需要的栈,taskAffinity参数
TaskAffinity参数标识了activity需要的栈的名字,默认情况是包名 ,也可以在即指定,该惨数只有和singleTask和allowTaskReparenting属性一起使用才有意义。和singletask一起使用,如上面描述的一样,和taskAddinity名字相同的就是activity需要的栈,
和allowTaskReparenting一起使用,A应用启动B应用的C activity,C具有该属性时,启动C后,C会从A的任务栈移到B的任务栈,点击B应用的图标后启动的是Cactivity而不是主activity;因为A的activity的Affinity和B的Affinity不一样所以会移动。
任务栈分前台和后台,跟栈内的activity相关
如何指定启动模式
方法一:activity的注册信息中添加属性,launchmode
方法二:
intent.addFlags(Intent.Flag_Acitivy_new_task)
区别:第二种优先级高,同时存在是以第二种为准。
限定范围有区别,第一种为U发直接设定,Flag_activity_clear_top标识,第二种无法指定singleinstance
ps:
adb shell dumpsys activity 可以查看任务栈信息
activity的flags
FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TOP:启动时,栈中所有位于他上面的activity都出栈,一般和new——task一起使用,如果不是singletask,那么连同自己也出栈,创建新的实例。singletask默认具有该标志
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:
excludeFromRecents 不会出现在里氏activity中
相关文章推荐
- 4-1使用<a>标签,链接到另一个页面
- 有效的使用功能
- 整形数据(int)如何转换到字节型数据(byte)的
- Find Peak Element
- Web前端教程-02.06.HTML表单和php环境搭建
- 芯片MC9S08ODV (Freescale) -- 8位单片机
- 数字,金额格式
- 深入学习activity之不同情况的生命周期
- 20145120《Java程序设计》课程总结
- 学习进度第十六周
- php 分页
- 手工简单制作一个PCB板(热传)
- 《老罗的Android之旅》导读PPT
- 批处理文件语法
- 芯片CS42448 音频DAC
- Win7系统怎么给文件夹加密码?文件夹加密教程
- Web前端教程-02.05.HTML列表、块和布局
- 芯片WM8759 音频DAC
- 系统分析与设计知识点总结
- 浅谈指针的特点