`
wenzongliang
  • 浏览: 462754 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

activity四种启动模式

 
阅读更多

 

 我们在开发项目的过程中,会涉及到该应用中多个Activity组件之间的跳转,或者夹带其它应用的可复用的Activity。例如我们可能希望跳转到原来某个Activity实例,而不是产生大量重复的 Activity。这样就需要我们为 Activity 配置特定的加载模式,而不是使用默认的加载模式。

Activity 有四种加载模式

[1] standard 模式

     这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。

 

[2] singleTop 模式(在顶找)

     如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。

 

[3] singleTask 模式(在本栈中找)

     如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

 

[4] singleInstance 模式(在系统中找)

     在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。

 

设置启动模式的位置在 AndroidManifest.xml 文件中 Activity 元素的 android:launchMode 属性。

 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。

这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。

加载模式分类及在哪里配置

Activity有四种加载模式:

  • standard
  • singleTop
  • singleTask
  • singleInstance

设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:

<activity android:name="ActB" android:launchMode ="singleTask"></activity>

也可以在Eclipse ADT中图形界面中编辑:

image

 

区分Activity的加载模式,通过示例一目了然。这里编写了一个Activity A(ActA)和Activity B(ActB)循环跳转的例子。对加载模式修改和代码做稍微改动,就可以说明四种模式的区别。

 

 

[1] standard 模式

 

 

 

第一个界面:

image

点击按钮后:

image

可以多点几次。发现每次都创建了该Activity的新实例。standard的加载模式就是这样的,intent将发送给新的实例。

现在点Android设备的回退键,可以看到是按照刚才创建Activity实例的倒序依次出现,类似退栈的操作,而刚才操作跳转按钮的过程是压栈的操作。如下图:

image

 

[2] singleTop 模式

 

还是用刚才的示例,只需将launchMode改为singleTop,就能看到区别。

运行的时候会发现,按多少遍按钮,都是相同的ActiA实例,因为该实例在栈顶,因此不会创建新的实例。如果回退,将退出应用。

image

singleTop模式,可用来解决栈顶多个重复相同的Activity的问题。

如果是A Activity跳转到B Activity,再跳转到A Activity,行为就和standard一样了,会在B Activity跳转到A Activity的时候创建A Activity的新实例,因为当时的栈顶不是A Activity实例。

ActA类稍作改动:

ActB类:

ActB类使用默认(standard)加载,ActA使用singleTop加载。结果类似下图:

image

如果把ActA的加载模式改为standard,情况一样。

 

现有2个项目,taskA、taskB。taskA负责调用taskB中指定的界面。

taskB中有3个界面,a、b、c,每个界面显示它所在的task id。

 

[3] singleTask 模式

 

 

其中b界面被声明为SingleTask。

先运行taskB,显示a界面,由a界面调用b界面,这时b界面的taskid与a界面的taskid是一致的,说明b界面与a界面在同一个task中;由b界面调用c界面时,c界面的taskid与a和b界面的taskid一致,说明这三个界面是在同一个task中。当前显示的是c界面,此时按Home键回到桌面,运行taskA的界面调用taskB的b界面,这时b界面显示出来,它的taskid没有变,还是之前的taskid,只不过之前显示的是c界面,这时c界面已经不知所踪,这时再按back键,则回到了a界面,然后是taskA的界面。

这说明,SingleTask所标注的Activity在被自身的app调用时,是不新建task的,同时,如果系统中存在了这个SingleTask界面的实例时,会将其所在的task切换到前台,并把SingleTask界面之后开启的其他界面全部关闭(有待考证是否关闭)。

 

另外有一种情况,例如:a界面被调用,这时按Home键返回到桌面,启动taskA,并调用b界面,这时b界面的taskid与a界面的一致,说明b界面与a界面同属于一个task。如果直接运行taskA调用b界面,b的taskid与taskA的界面的taskid不同,说明在新task中实例化了b界面,由b界面调用c界面,c界面的taskid与b界面一致,说明b与c同属于一个task。

 

[4] singleInstance 模式

 

 

将b界面声明为SingleInstance。

先运行taskB,显示a界面,由a界面调用b界面,这时b界面的taskid与a界面的taskid不同,说明b界面是在新task中生成的实例;由b界面调用c界面,c界面的taskid与a界面的taskid相同,说明a、c界面同属于一个task。

由此可以看出SingleTask与SingleInstance是有本质区别的,而不是像网上说的那样,都是task的root activity,这是有错误的。

我的话费充值店-各种面额

电信100元仅售98.60 
联通100仅售99.00
移动100仅售99.30

分享到:
评论
2 楼 蓝月儿 2013-03-14  
好精细的说明,学习
1 楼 HellowWord 2012-11-04  
   看了好多,启动模式介绍的,我感觉你写的是最通俗易懂的,很好很强大。

相关推荐

    Activity四种启动模式

    本文将深入探讨Activity的四种启动模式:标准模式(Standard)、单实例模式(SingleInstance)、单任务模式(SingleTask)和单栈顶模式(SingleTop),并结合博客《Activity四种启动模式》中的内容进行详细解释。...

    android Activity 四种启动模式例子

    本项目提供了对Android Activity四种启动模式的实例演示,让我们逐一深入理解这四种模式。 1. standard(标准模式) 这是Activity的默认启动模式。在standard模式下,每次启动一个Activity都会创建一个新的实例,...

    Activity四种启动模式Demo

    本示例代码详细展示了Activity的四种启动模式:标准模式(Standard)、单实例模式(SingleInstance)、单任务模式(SingleTask)和单栈顶模式(SingleTop)。 1. 标准模式(Standard): 这是Activity的默认启动...

    activity四种启动模式demon

    本文将深入探讨Activity的四种启动模式,旨在帮助你更好地理解它们的工作原理,并能灵活运用到实际项目中。 首先,我们来看看Activity的启动模式有哪些: 1. **标准模式(Standard)**:这是默认的启动模式,每次...

    Android中Activity四种启动模式和taskAffinity属性详解-Rong

    为了管理Activity的生命周期和用户界面的流程,Android系统提供了一系列的机制和属性,其中包括四种不同的Activity启动模式以及taskAffinity属性。这些启动模式和属性共同作用于Activity所属的任务栈(Task)和后退...

    activity的四种启动模式

    了解和掌握Activity的四种启动模式对于优化用户体验和应用性能至关重要。 1. **standard模式** 这是最常见的启动模式,也是默认模式。在standard模式下,每当用户通过意图(Intent)启动Activity时,系统都会创建...

    Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags()

    ### Android Activity 的四种启动模式与 Intent.setFlags()详解 #### 一、Android Activity 四种启动模式 在 Android 应用开发中,Activity 是构成应用的基本单元之一,它负责显示用户界面并处理用户交互。为了更...

    Activity 四种启动模式详细介绍

    Activity 四种启动模式详细介绍 ...Activity启动模式设置: &lt;activity android:name=.MainActivity android:launchMode=standard&gt; &lt;activity android:name=.MainActivity android:launchMode

    android activity4种启动模式测试

    Android提供了四种不同的启动模式:标准模式(Standard)、单实例模式(SingleTop)、单任务模式(SingleTask)和单栈顶模式(SingleActivity)。下面我们将详细探讨这四种模式的特性和应用场景。 1. **标准模式...

    Android中Activity的四种启动模式案例

    本文将深入探讨Android中Activity的四种启动模式:标准模式(Standard)、单实例模式(SingleInstance)、单任务模式(SingleTask)和单栈顶模式(SingleTop),并结合案例进行详细解析。 **1. 标准模式(Standard...

    Android Activity的四种启动模式及其应用场景

    在Android应用开发中,Activity是用户界面的主要载体,它的启动模式是决定Activity如何启动和运行的关键因素。...通过这种方式,开发者能够更好地掌握Activity启动模式的使用,提高应用的健壮性和用户体验。

    Activity启动模式实验代码

    一、Activity启动模式概述 1. **标准模式(Standard)**:这是Activity的默认启动模式,每次启动都会创建一个新的实例,无论是否已在栈中存在。因此,同一个Activity可能会有多个实例。 2. **单实例模式...

    activity启动模式测试

    标准模式是最常见的Activity启动模式,每个启动请求都会创建一个新的Activity实例。如果新的实例被叠加到栈顶,那么它会覆盖之前显示的Activity。这种模式适用于大部分Activity,因为它允许灵活的导航和回退操作,...

    Activity启动模式demo

    本实例"Activity启动模式demo"全面展示了Activity启动模式的各种情况,下面将详细解释这些模式及其应用场景。 1. **标准模式(Standard)** 标准模式是Activity的默认启动模式,每次启动都会创建一个新的实例。...

    Activity的四种启动模式

    ### Activity的四种启动模式 #### 一、Standard模式 **定义**:这是系统默认的启动模式,每当激活一个新的Activity时,系统都会创建一个新的Activity实例,并将其压入任务栈的顶部。 **特点**: - **创建新实例**...

Global site tag (gtag.js) - Google Analytics