Activity的启动模式可以通过AndroidManifest.xml文件中的<activity>元素的属性来指定(当然也可以通过代码指定),一共有四种模式:
- standard
- singleTop
- singleTask
- singleInstance
在清单中的指定方法:
<activity android:name="ActivityMain" android:launchMode="singleTask"></activity>
这四种模式又分两类,standard和signleTop属于一类, singleTask和signleInstance属于另一类。
standard和signleTop的共同特点:
- standard和singleTop属性的 Activity 的实例可以属于任何任务(Task),并且可以位于Activity堆栈的任何位置。
- 比较典型的一种情况是,一个任务的代码执行startActivity(),如果传递的 Intent 对象没有包含 FLAG_ACTIVITY_NEW_TASK 属性, 指定的 Activity 将被该任务调用,从而装入该任务的Activity 堆栈中。
standard和singleTop的区别在于:
- standard模式的Activity在被调用时会创建一个新的实例,所有实例处理同一个Intent对象;
- 但对于singleTop模式的Activity,如果被调用的任务已经有一个这样的Activity 在堆栈的顶端,那么不会有新的实例创建, 任务会使用当前顶端的Activity实例来处理Intent对象,换句话说,如果被调用的任务包含一个不在堆栈顶端的 singleTop Activity, 或者堆栈顶端为 singleTop 的Activity的任务不是当前被调用的任务,那么,仍然会有一个新的Activity对象被创建。
singleTask 和 singleInstance的共同特点:
- singleTask 和 singleInstance模式的Activity 仅可用于启动任务的情况;
- 这两种模式的Activity总是处在Activity堆栈的最底端;
- 并且一个任务中只能被实例化一次。
singleTask 和 singleInstance的的区别在于:
- 对于 singleInstance模式的Activity, 任务的Activity堆栈中如果有这样的Activity,那它将是堆栈中的唯一的 Activity, 当前任务收到的 Intent 都由它处理, 由它开启的其他 Activity 将在其他任务中被启动;
- 对于 SingleTask模式的Activity,它在堆栈底端,其上方可以有其他Activity被创建, 但是,如果发给该Activity的Intent对象到来时该Activity不在堆栈顶端,那么该Intent对象将被丢弃,但是界面还是会切换到当前的Activity。
示例:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="belson.android.uECG" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ecg_logo" android:label="@string/app_name"> <activity android:name=".splashScreen" android:label="@string/app_name" android:launchMode="singleTop" android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <!-- landscape设置强制横屏 --> <!-- Theme.NoTitleBar.Fullscreen设置启动界面无标题全屏 --> <!-- singleTop模式设置在程序没有运行时 始终从该启动界面的activity做入口运行--> <!-- 对于singleTop模式的Activity,如果被调用的任务已经有一个这样的Activity 在堆栈的顶端,那么不会有新的实例创建, 任务会使用当前顶端的Activity实例来处理Intent对象,换句话说,如果被调用的任务包含一个不在堆栈顶端的 singleTop Activity, 或者堆栈顶端为 singleTop 的Activity的任务不是当前被调用的任务,那么,仍然会有一个新的Activity对象被创建 --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".uECGActivity" android:launchMode="singleTask" android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <!-- 设置主界面无标题全屏 --> <!-- android:launchMode="singleInstance" 这里暂时去掉singleInstance模式,因为该模式会导致无法返回预置数据 --> <!-- SingleTask模式设置 从通知栏里调出当前正在运行的程序时直接跳转到之前的activity 而不重新onCreate程序 --> <!-- 对于 SingleTask模式的Activity,它在堆栈底端,其上方可以有其他Activity被创建,但是,如果发给该Activity的Intent对象到来时该Activity不在堆栈顶端,那么该Intent对象将被丢弃,但是界面还是会切换到当前的Activity。--> <!-- 设置keyboardHidden|orientation 这样保证从进入activity始终是横屏 不会出现多次onCreate和onDestroy --> </activity> <service android:enabled="true" android:name=".SocketService"> <intent-filter> <action android:name="belson.android.uECG.SocketService" /> </intent-filter> </service> </application> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> </manifest>
转载自:
http://blog.chinaunix.net/uid-20665441-id-2995070.html
http://www.cnblogs.com/hibraincol/archive/2011/04/11/2012719.html
感谢原作者的慷慨分享~~
相关推荐
activity的四种加载模式:<!-- 不写的话也默认是standard --> <!-- standard表示每执行一次startactivity就新建一个实例 singleTop表示每次执行startactivity时,如果当前activity在taskstack的顶端,则不...
总之,Android的四种Activity加载模式提供了一种灵活的方法来管理Activity实例和任务,帮助开发者实现更高效、更流畅的应用体验。在设计应用程序的导航流程时,充分理解和利用这些模式是非常重要的。
Activity 的四种加载模式对于应用程序的导航和行为有着显著的影响。理解这些模式对于优化用户体验和避免意外的行为至关重要: 1. standard 模式是最常见的,每次启动 Activity 都会创建新的实例。这可能导致 Task ...
Android系统中Activity的四种加载模式 ...掌握Android系统中Activity的四种加载模式对于Android应用程序的开发至关重要,因为它能够帮助开发者更好地控制Activity的加载关系,提高应用程序的性能和用户体验。
本示例"Activity加载模式demo"将深入探讨四种不同的Activity加载模式,并通过代码演示如何实现它们。 1. **标准模式(Standard)** 标准模式是最常见的Activity加载模式,也是默认模式。在这种模式下,每次启动...
本篇文章将深入解析四种加载模式:`standard`、`singleTop`、`singleTask`和`singleInstance`,并提供实际应用场景,帮助开发者更好地掌握这些核心概念。 #### 1. Standard模式 Standard模式是最常见的加载模式,...
在Android应用开发中,Activity是用户界面的基本组件,它负责展示和交互。本文将深入探讨Activity的加载模式以及其...阅读提供的"Activity加载模式及生命周期"文档,将有助于你深入理解这些概念,并将其应用于实践中。
`Activity`的属性和加载模式对于理解Android应用的行为至关重要。这篇博客文章可能深入探讨了这些概念。 首先,让我们来了解一下`Activity`的一些基本属性: 1. **标签(Label)**:这是显示在用户界面上的文本,...
接下来,我们将详细讨论Android Activity的四种加载模式:standard、singleTop、singleTask和singleInstance,并通过示例分析它们之间的区别。 1. **standard(标准模式)** 这是Activity的默认加载模式,不需要在...
本文将详细解析Android编程中的四种Activity加载模式:standard、singleTop、singleTask和singleInstance,帮助开发者更好地理解和掌握Activity的生命周期及切换逻辑。 首先,Activity的状态主要有四种:活动的...
5. Activity的四种加载模式: - 标准模式(Standard):每次启动都会创建新的实例,可以放入任何Task。 - 单实例模式(SingleInstance):在整个系统中只有一个实例,且总是在新的Task中启动。 - 单任务模式...
- **启动模式**:分为标准模式(Standard)、单实例模式(SingleInstance)、单任务模式(SingleTask)和单栈顶模式(SingleTop)。它们决定了新启动的Activity如何与现有Activity交互和在任务栈中的位置。 - **...
- 单实例模式(singleInstance):在单独的任务栈中仅有一个该Activity实例,且不会和其他任何Activity共享栈。 2. 布局动画: - Android提供了View动画和属性动画两种方式来实现布局的动态效果。 - View动画...
Activity有四种不同的启动模式,分别是:standard、singleTop、singleTask和singleInstance。这些模式主要决定了当用户点击一个Intent启动Activity时,系统如何处理已存在的或新建的Activity实例。 1. **standard...
6. **Activity的四种启动模式**: - `standard`(默认模式):每次启动都会创建一个新的Activity实例。 - `singleTop`:如果目标Activity已经在栈顶,不会创建新的实例,而是调用其`onNewIntent(Intent)`方法。 -...
启动模式是Activity启动时的一种策略,有四种主要模式:标准模式(Standard)、单实例模式(SingleInstance)、单任务模式(SingleTask)和单栈顶模式(SingleTop)。标准模式是最常见的,每个启动都会创建新的...
- **单任务模式(singleTask)**:系统中只会存在一个该Activity的实例,如果有新的请求,会将当前Activity栈顶的Activity出栈,然后将新的请求放入栈顶。 - **单实例模式(singleInstance)**:类似于单任务模式...
- singleTask:每个任务栈最多只有一个实例,启动时会清理栈内所有同名Activity。 - singleInstance:全局唯一实例,单独在一个任务栈中。 8. **与Activity和Task相关的Intent启动方式** - FLAG_ACTIVITY_NEW_...