当前位置:编程学习 > XML/UML >>

AndroidManifest.xml文件详解(activity)(三)

android:launchMode

这个属性定义了应该如何启动Activity的一个指令。有四种工作模式会跟Intent对象中的Activity标记(FLAG_ACTIVITY_*常量)结合在一起用来决定被调用Activity在处理Intent对象时应该发生的事情,这四种模式是:

standard

singleTop

singleTask

singleInstance

默认的模式是standard。

像下表显示的那样,这四种模式被分成两组,standard和singleTop为一组,singleTask和singleInstance为一组。带有standard和singleTop启动模式的Activity能够被实例化多次。其实例能够属于任何任务,并且能够在Activity的堆栈中被定为。通常是调用startActivity()方法把它们加载到任务中(除非Intent对象包含了一个FLAG_ACTIVITY_NEW_TASK指令,这种情况下会选择启动一个新的任务。)

相比之下,singleTask和singleInstance启动模式的Activity只能启动一个任务。它们始终是Activity堆栈的根节点。并且设备每次只能拥有一个这样的Activity---只有一个这样的任务。

standard和singleTop模式彼此在一个方面有所不同:对于standard启动模式的Activity,每次要有一个新的Intent对象才能启动,系统会创建一个新的Activity类的实例来响应Intent对象的请求。每个实例处理一个Intent对象。同样,singleTop启动模式的Activity也会创建一个新的实例来处理一个新的Intent对象。但是,如果目标任务中在堆栈的顶部已经有了这个Activity的实例,那么这个实例会接受这个新的Intent对象(在onNewIntent()回调方法中调用);而不是创一个新的Activity实例。另一种情况,如:如果singleTop启动模式的Activity的一个实例,在目标任务中已经存在,但是它没有在任务堆栈的顶部,或者是在堆栈的顶部,却不是目标任务,那么就会创建一个新的Activity实例,并把它压入目标任务堆栈。

singleTask和singleInstance模式彼此也在一个方面有所不同:singleTask模式的Activity,允许其他Activity作为它所在任务的一部分。它始终在所在任务的根节点,但是其他的Activity(需要是standard和singleTop模式的Activity)能够被加载到它的任务中。而singleInstance模式的Activity,不允许其他的Activity做它所在任务的一部分。它是其任务中唯一的Activity。如果要启动另外的Activity,那么被启动的Activity要关联到不同的任务中---就像是在Intent对象中设置了FLAG_ACTIVITY_NEW_TASK标记一样。

  

使用场景 启动模式 支持多实例吗? 解释
针对大多数Activity的启动模式 standard Yes 默认启动模式,系统总是在目标任务中创建一个新的Activity实例,并把Intent对象发送给它。
singleTop 有条件的 如果这中模式的Activity始终存在与目标任务堆栈的顶部,系统就会通过调用它的onNewIntent()方法,把Intent对象发送给这个实例,而不是创建一个的Activity实例。
特殊的启动模式,通常不推荐使用。 singleTask No 系统在一个新任务堆栈的根节点处创建这个Activity,并且把Intent对象发送给它。但是,如果这个Activity的实例已经存在,系统就会通过调用它的onNewIntent()方法,把Intent对象发送给这个实例,而不是创建一个的Activity实例。
singleInstance No 除了系统不能把其他的Activity加载到该Activity实例所归属的任务中之外,其他与singleTask模式相同。这种模式的Activity始终是单独存在的,并且是其任务中唯一的成员
如上表所示,standard模式是默认模式,并且适用于大多数Activity。singleTop也是一种通用的,且被很多Activity类型所使用的启动模式。其他模式(singleTask和singleInstance)是不推荐给大多数应用程序使用的,因为它们会产生用户不熟悉的交互模式,并且与大多数应用程序也会产生差异。
不管选择了那种启动模式,都要测试Activity在启动期间的可用性,并且在使用Back按钮时能够返回到其他的Activity和任务。
 



摘自 FireOfStar的专栏
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,