android:launchMode — “standard” “singleTop” “singleTask”

android:launchMode — “standard” “singleTop” “singleTask” “singleInstance”
Mr小天天 / 24/02/2011 / No comments

版本一

    * standard 和 single top类似:这两种载入模式的activity可以,实例可以属于任何task,能够在activity栈中的任何位置通常,通过调用 startActivity() 将它们载入到task里(除非Intent对象包含FLAG_ACTIVITY_NEW_TASK 指令,这种情况下会选择一个不同的task。
    * singleTask和singleInstance activity只能开始一个task。它们总是位于activity stack的根部。并且,设备在同一时刻只能有一个该activity的实例存在 — 只有一个这样的task。
    * “singleTask”和”singleInstance”模式区别:一个”singleTask” activity允许其他的activity作为它的task里的一部分。”singleInstance”反之。

版本二

    * 哪个任务存放着activity,用来对行为进行响应。对“standard”和“singleTop”模式来说,这个任务是产生行为(并且调用 startActivity())的那个——除非行为对象包含了 FLAG_ACTIVITY_NEW_TASK标记。在这种情况下,像前面那节Affinities and new tasks 描述的一样,将会选择一个不同的任务。
    * 它们是否可以有多个实例。”standard”和“singleTop”类型的activity可以被实例化多次。它们可以属于多个任务,一个特定的任务也可以拥有同一个activity的多个实例。
    * 作为比较”singleTask”和”singleInstance”类型的activity只限定有一个实例。因为这些activity是任务的根。这个限制意味着,在设备上不能同时有超过一个任务的实例。
    * 是否能有其他的activity在它所在的任务中。”singleInstance”类型的activity是它所在任务中唯一的 activity。如果它启动了其他的activity,不管那个activity的启动模式如何,它都会加载到一个不同的任务中——好像行为对象中的 FLAG_ACTIVITY_NEW_TASK标记。在其他的方面,”singleInstance”和”singleTask”模式是相同的。
    * 其他三种模式运行任务中有多个activity。”singleTask”总是任务中的根activity,但是它可以启动其他的activity并分配到它所在的任务中。”standard”和”singleTop”类型的activity可以出现在任务中的任何地方。
    * 是否启动一个新的实例来处理一个新的行为。对默认的”standard”模式来说,对于每一个行为都会创建一个新的实例来响应。每个实例只处理一个行为。对于”singleTop”模式,如果一个已经存在的实例位于目标任务activity栈的栈顶,那么他将被重用来处理这个行为。如果它不在栈顶,它将不会被重用,而是为行为创建一个新的实例,并压入栈中。
    * 例如,假设,一个任务的activity栈由根activity A和 B,C,D从上到下按这样的顺序组成,所以这个栈就是A-B-C-D。一个行为指向类型为D的activity。如果D是默认的”standard”加载模式,一个新的实例会被启动,栈现在就是这样A-B-C-D-D。但是,如果D的加载模式是”singleTop”,已经存在的实例会用来处理这个行为 (因为它在栈的顶端)并且栈中还应该是A-B-C-D。
    * 在前面提到,”singleTask”和”singleInstance”类型的activity最多只有一个实例,所以他们的实例应该会处理每个新的行为。”singleInstance”类型的activity总是在栈的顶端(因为他是任务中唯一的一个activity),所以总是能够适当的处理行为。然而,”singleTask”类型的activity也许会有其他的activity在它的上面。如果是这样的话,那就不能处理这个行为,这个行为被丢弃。(即使这个行为被丢弃了,它的到来也会导致那些应该保留不变任务显示到前台来)。
    * 当一个activity被要求处理一个新的行为时,行为对象会通过调用activity的 onNewIntent() 方法传递进来(最初启动activity的行为可以通过调用getIntent()方法获得)。
    * 注意,当创建一个新的activity实例来处理一个新的行为时,用户总是能够通过按下BACK按键退回到前面的状态(前一个activity)。但是当一个已经存在的activity实例处理一个新的行为时,用户不能通过按下BACK按键退回到前面的状态。

你可能感兴趣的:(C++,c,android,C#)