每一个activity都有一个taskAffinity,具备相同taskAffinity的activity能够被看作是同一个task.activity的taskAffinity是有他的root Activity决定的。taskAffinity 决定了activity将要从新加入的的那个task是哪一个。html
前面说了,具备相同taskAffinity的能够被看作是同一个task。java
当经过
启动一个activity时,该task将具备相同taskAffinity的activity汇集起来,同属一个任务。默认状况下,因此activity的taskAffinity,是相同的,即应用程序的包名,你也能够经过设置不一样的taskAffinity,来将activity分配到不一样的task中。注经过FLAG_ACTIVITY_NEW_TASK
启动的任务,若点击home,回到主界面,点击查看后台任务按钮,能够看到该应用有两个后台任务,另外一个即你FLAG_ACTIVITY_NEW_TASK
启动的那个。androidFLAG_ACTIVITY_NEW_TASK
taskAffinity名字不易过短,过短运行会提示错误。app
想像这样一个场景,application 1和2,application1中一个MainActivity,其配置以下
spa
<activity
android:allowTaskReparenting="true"
android:name=".MainActivity"
android:taskAffinity="com.test"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
code
application2里面有一个MainActivity.java和TestActivity.java,TestActivity1.java配置以下:htm
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:taskAffinity="com.test"
android:name=".TestActivity"
android:label="@string/title_activity_test" >
get
先启动app1,而后按home键,app1到了后台当中,而后启动app2,app2中MainActivity->TestActivity.java->TestActivity1.java,而后按返回键,按理应该是TestActivity1.java->TestActivity.java->MainActivity.java,可咱们会看到这样TestActivity1.java->TestActivity.java->MainActivity.java(app1的)->MainActivity.java,这是由于app1的MainActivity的taskAffinity和app2的TestActivity和TestActivity1的相同,能够认为属于同一任务,因此当app1回到后台时 ,当再次有相同任务启动时,其就会被该任务所收留,因此就出现的这种现象,注意app1的MainActivity的 android:allowTaskReparenting="true"属性要设置为true,去掉无此效果。android:allowTaskReparenting代表activity是否被容许从task中移除,加入到和他有相同taskAffinity标志的task中去,当有相同taskAffinity的task被bring to front时。string
或者这样启动程序,先启动APP2,MainActivity->TestActivity.java->TestActivity1.java,进入TestActivity1,按home键将其置于后台,在启动app1,此时奇怪的事情发生了,你不会看到app1的MainActivity,你看到的仍然是app2处于最顶端的TestActivity1的页面。it
当app2按MainActivity->TestActivity.java->TestActivity1.java顺序跳到TestActivity1时,在TestActivity1里面执行finishAffinity();会finish掉当前的TestActivity1.java和同处于一个Task的TestActivity.java。显示出MainActivity的界面。
谨此记录。