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的顶端,则不...
SingleTask与SingleInstance的区别,看过文档后还是不太明白,于是写了一个测试程序,运行TaskA,页面显示taskid,通过Next调出TaskB的Activity,每个页面都会显示当前的taskid,且通过页面透明叠加,可以清楚看到...
http://blog.csdn.net/dinko321/article/details/8314974 的验证代码
Android笔记之四种launchMode例程,Activity有四种加载模式: standard singleTop singleTask singleInstance
Android的Activity一共有4中启动模式分别是:standard、singleTop、singleTask、singleInstance。资源是该例子的项目,直接导入项目即可。
Activity7大生命周期与4种启动模式(standard,singleTop,singleTask,singleIntance)
当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会... 启动模式有4种,分别为standard、singleTop、singleTask、singleInstance; 讲解启动模式之前,有必要先讲解一下“任务栈”
Android的Activity的Launch模式之SingleTask案例,实际案例源码
写了一篇关于Activity启动模式的文章,这是示例代码
android-sample-launchking 了解Activity的四种launchMode。 标准,singleTop,singleTask和singleInstance。 通过玩应用程序直接学习并体验launchMode的差异有关原始文档,请参阅A代表标准B代表singleTop C代表...
这里展示了不同应用使用标记SingleTask,以及SingleInstance的task的情况,也只展示了应用间启动和task进入后台的情况。
Android编程中经常涉及到页面的切换,启动一个新的页面(或者说Activity)的时候需要为其指定合适的“启动模式”。指定的启动模式不合适,会出现类似下面这种奇怪的效果: 你拿起QQ切换了一个新的账号,一直按返回却...
android activity启动模式:standard、singleTop、singleTask、singleInstance详解
本文实例讲述了Android编程中Activity的四种启动模式。分享给大家供大家参考,具体如下: Activity启动方式有四种,分别是: standard singleTop singleTask singleInstance 可以根据实际的需求为Activity设置对应的...
本文实例分析了Android Activity启动模式之singleTask。分享给大家供大家参考,具体如下: 前面的文章介绍了Android 活动Activity的启动模式:standard 和singleTop 。本文继续介绍Activity的下一个启动模式:...
Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例。 2. singleTop,激活Activity时,如果栈顶是...
Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name=".MainActivity"android:launchMode="standard" /> Activity的四种启动模式: 1.standard 模式启动模式,每次激活...
关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法,便于读者正确应用。 Activity的启动模式有4种,分别是standard...