我有兩個活動:活動A和活動B.活動A的啓動模式是標準的,而活動B的啓動模式是singleTask。launchMode =「singleTask」不創建新任務
<activity
android:name=".AActivity"
android:label="@string/app_name"
android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="dd"></data>
<data android:host="a"></data>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<activity
android:name=".BActivity"
android:label="@string/app_name"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="dd"></data>
<data android:host="b"></data>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
我啓動應用程序,啓動程序活動A啓動。然後我按Home按鈕並返回到手機的主屏幕。然後我啓動瀏覽應用程序,並鍵入以下內容:
dd://b
打開活動B.系統導航到我的應用程序和活動A.頂部開始活動B在這一點上,如果我按後退按鈕,活動B是突然出現,我看到活動A.
這不是我所期待,因爲Android文檔指出:
對於singleTask活動,系統會創建一個新的任務和新任務的根實例活動。但是,如果活動的實例已經存在於單獨的任務中,則系統通過調用onNewIntent()方法將意圖路由到現有實例,而不是創建新實例。一次只能有一個活動實例。
我從這些句子理解是什麼,因爲活動的一個實例,B不存在我的情況下,一個新的任務應該已經啓動,它應該在它的棧(另一個例子只有活動B我應用程序應該仍然存在於一個單獨的任務中,並且它的堆棧中應該有Activity A)。然後,如果我在活動B時按下按鈕,因爲它是後臺堆棧中的唯一活動,它會彈出並且系統返回到瀏覽器。
爲什麼不是這樣? android系統如何知道我的應用程序已打開並導航到它,並在現有應用程序堆棧上啓動活動B,而不是啓動我的應用程序的另一個實例,並讓我的應用程序的兩個實例擁有自己的堆棧? 在新任務中實例化活動意味着什麼?任何人都可以解釋嗎?
謝謝。
這進一步解釋了它。很好的發現。 –
android文檔聲明「singleTask:系統創建一個新任務並在新任務的根目錄下實例化活動」。然後補充道:「無論一項活動是從一項新任務開始,還是在與開始它的活動相同的任務中,」後退「按鈕始終將用戶帶到之前的活動。那麼,如何確保」singleTask「無法啓動一個默認的新任務?https://developer.android.com/guide/components/activities/tasks-and-back-stack.html – feresr
https://issuetracker.google.com/issues/36921210 – mhsmith