# Android中Activity四种启动模式和taskAffinity属性详解 #(4原创分享)
----------影子侠开发者社区Rong
## 四 实例验证singleInstance的行为 ##
根据上面的讲解,并且参考谷歌官方文档,singleInstance的特点可以归结为以下三条:
1. 以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个这样的实例
1. 以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他开启的任何activity都会运行在其他任务中(官方文档上的描述为,singleInstance模式的Activity不允许其他Activity和它共存在一个任务中)
1. 被singleInstance模式的Activity开启的其他activity,能够开启一个新任务,但不一定开启新的任务,也可能在已有的一个任务中开启
下面对这三个特点分别验证,所使用的示例同样为AndroidTaskTest,只不过会进行一些修改,下面列出它的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jg.zhang.androidtasktest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17" />
<application android:allowBackup="true"
android:icon="@drawable/ic_launcher" android:label="androidtasktest">
<activity android:name="com.jg.zhang.androidtasktest.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.jg.zhang.androidtasktest.SecondActivity"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="com.jg.zhang.androidtasktest.ACTION_MY"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:name="com.jg.zhang.androidtasktest.ThirdActivity"/>
</application>
</manifest>
由上面的清单文件可以知道,该应用包括三个activity,分别为MianActivity,SecondActivity,ThirdActivity,其中SecondActivity启动模式设置为singleInstance。MianActivity可以开启SecondActivity,SecondActivity可以开启ThirdActivity。 并且为了可以在其他应用中开启SecondActivity,为SecondActivity设置了一个IntentFilter,这样就可以在其他应用中使用隐式Intent开启SecondActivity。
为了更好的验证singleInstance的全局唯一性,还需要其他一个应用,对上面的AndroidTaskTest1进行一些修改即可。AndroidTaskTest1只需要一个MianActivity,在MainActivity中点击按钮会开启AndroidTaskTest应用中的SecondActivity。开启AndroidTaskTest应用中的SecondActivity的代码如下:
/**
* 该方法在布局中按钮的android:onClick属性中指定
* android:onClick="launchOtherActivity"
* @param v
*/
public void launchOtherActivity(View v){
Intent intent = new Intent();
//以下Action为"com.jg.zhang.androidtasktest.ACTION_MY"
//即AndroidTaskTest应用中SecondActivity的action
intent.setAction("com.jg.zhang.androidtasktest.ACTION_MY");
startActivity(intent);
}
### 下面开始验证第一个特点:
此文章系原创,如需转载,请注明出处影子侠开发者社区www.yingzixia.com