activity四种加载模式的设置
来源:互联网 发布:代码高亮js 编辑:程序博客网 时间:2024/04/28 07:29
<activity>元素的launchMode属性可以设置四种不同的加载模式:
"standard"(默认值)
"singleTop"
"singleTask"
"singleInstance"
这些模式之间的差异主要体现在四个方面:
哪个任务会把持对intent做出响应的activity。对“standard”和“singleTop”模式而言,是产生intent(并调用startActivity())的任务──除非Intent对象包含FLAG_ACTIVITY_NEW_TASK标记。而在这种情况下,如同上面Affinitie和新任务一节所述,会是另外一个任务。
相反,对“singleTask”和“singleInstance”模式而言,activity总是位于任务的根部。正是它们定义了一个任务,所以它们绝不会被载入到其它任务之中。
activity是否可以存在多个实例。一个“standard”或“singleTop”的activity可以被多次初始化。它们可以归属于多个任务,而一个任务也可以拥有同一activity的多个实例。
相反,对“singleTask”和“singleInstance”的activity被限定于只能有一个实例。因为这些activity都是任务的起源,这种限制意味着在一个设备中同一时间只允许存在一个任务的实例。
在实例所在的任务中是否会有别的activity。一个“singleInstance”模式的activity将会是它所在的任务中唯一的activity。如果它启动了别的activity,那个activity将会依据它自己的加载模式加载到其它的任务中去──如同在intent中设置了FLAG_ACTIVITY_NEW_TASK标记一样的效果。在其它方面,“singleInstance”模式的效果与“singleTask”是一样的。
剩下的三种模式允许一个任务中出现多个activity。“singleTask”模式的activity将是任务的根activity,但它可以启动别的activity并将它们置入所在的任务中。“standard”和“singleTop”activity则可以在堆栈的任意位置出现。
是否要载入新的类实例以处理新的intent。对默认的"standard"模式来说,对于每个新intent都会创建一个新的实例以进行响应,每个实例仅处理一个intent。“singleTop”模式下,如果activity位于目的任务堆栈的最上面,则重用目前现存的activity来处理新的intent。如果它不是在堆栈顶部,则不会发生重用。而是创建一个新实例来处理新的intent并将其推入堆栈。
举例来说,假设一个任务的堆栈由根activityA和activity B、C和位于堆栈顶部的D组成,即堆栈A-B-C-D。一个针对D类型的activity的intent抵达的时候,如果D是默认的“standard”加载模式,则创建并加载一个新的类实例,于是堆栈变为A-B-C-D-D。然而,如果D的载入模式为“singleTop”,则现有的实例会对新intent进行处理(因为它位于堆栈顶部)而堆栈保持A-B-C-D的形态。
换言之,如果新抵达的intent是针对B类型的activity,则无论B的模式是“standard”还是“singleTop”,都会加载一个新的B的实例(因为B不位于堆栈的顶部),而堆栈的顺序变为A-B-C-D-B。
如前所述,“singleTask”或“singleInstance”模式的activity永远不会存在多于一个实例。所以实例将处理所有新的intent。一个“singleInstance”模式的activity永远保持在堆栈的顶部(因为它是那个堆栈中唯一的一个activity),所以它一直坚守在处理intent的岗位上。然而,对一个“singleTask”模式的activity来说,它上面可能有,也可能没有别的activity和它处于同一堆栈。在有的情况下,它就不在能够处理intent的位置上,则那个intent将被舍弃。(即便在intent被舍弃的情况下,它的抵达仍将使这个任务切换至前台,并一直保留)
当一个现存的activity被要求处理一个新的intent的时候,会调用onNewIntent()方法来将intent对象传递至activity。(启动activity的原始intent对象可以通过调用getIntent()方法获得。)
请注意,当一个新的activity实例被创建以处理新的intent的时候,用户总可以按下BACK键来回到前面的状态(回到前一个activity)。但当使用现存的activity来处理新intent的时候,用户是不能靠按下BACK键回到当这个新intent抵达之前的状态的。
- activity四种加载模式的设置
- 【Activity】Activity的四种加载模式
- 区分Activity的四种加载模式
- 区分Activity的四种加载模式
- 区分Activity的四种加载模式
- 区分Activity的四种加载模式
- 话说Activity的四种加载模式
- 区分Activity的四种加载模式
- 区分activity的四种加载模式
- 区分activity的四种加载模式
- 区分activity的四种加载模式
- Activity的四种加载模式
- Activity的四种加载模式
- Activity的四种加载模式
- 区分Activity的四种加载模式
- Activity的四种加载模式
- Activity的四种加载模式
- Android四种Activity的加载模式
- 社会评价—高校毕业生评价体系中必要的一个环节(未完待续,边想边写)
- 仅仅是打开一扇窗户,外面的世界多精彩,要靠你自己用你自己的眼睛去看
- GP BLOG
- 信息技术提高班 改革方案(这是以前的草稿,仅仅是一部分.进攻同学们讨论)
- db2 清表脚本
- activity四种加载模式的设置
- 多线程下的select网络程序结构
- [ios开发基础之]代码块 ——block
- 职业导向训练(必修课)
- 微软系统快捷键不仅仅是记在计算机中,要快乐有效的放到自己的大脑中。
- 关于预测股市点位
- Oracle 10g 体系结构
- cocos2d CCTouchDispatcher 触摸分发
- Installed 8.50 but still have the old look?