Intent.FLAG_ACTIVITY_NEW_TASK

weixin_33866037發表於2018-06-26

今天剛好有看了下這方面的一些資料,就拿你這個例子來說吧:如果C這個Activity在Manifest.xml中的宣告中新增了Task affinity,並且和B所在棧的affinity不同,系統首先會查詢有沒有和C的棧 affinity相同的棧存在,如有存則將C壓入那個棧,無則會新建一個屬於C的affinity的棧將其壓入。如果C的Task affinity預設沒有設定,或者和B所在的棧的affinity相同,和不加FLAG_ACTIVITY_NEW_TASK 標記效果是一樣的。

NEW_TASK這個標誌涉及到一個Activity的親和性---taskAffinity一個app中的所有Activity都有一個這個taskAffinity,可以在Manifest中進行手動設定但一般我們都會忽略,一個app中的所有Activity的taskAffinity都繼承於Application的taskAffinity而Application的taskAffinity都預設為package的包名NEW_TASK這個flag在Activity啟動的時候,會首先去找具有跟這個taskAffinity相同的task;如果找不到具有相同親和性的task,則新建一個task丟進去所以題主這題就很明顯了,第二個Activity肯定會被丟到跟第一個Activity相同的task中去了