按返回鍵不返回上一個Activity (Activity的啟動模式)
在實際項目開發中往往會遇到這樣的情況,有 A、B、C 三個 Activity,在 A 中啟動 B,在 B 中啟動 C 。想在 C 中按 back 鍵直接返回到 A,但是按 back 鍵返回的是 B 。怎么辦?
其實很簡單,只需要設置 B 的啟動模式為 singleInstance,然后在 B 啟動 C 之后 finish() 即可。
例如:
<activity android:name=".B" android:launchMode="singleInstance"/>startActivity(new Intent(B.this, C.class));finish();
下面介紹一下 Activity 的啟動模式
1.standard: 標準模式,這個是系統的默認模式。
每次啟動一個 Activity 都會重新創建一個新的實例,不管這個實例是否存在。
在這種模式下,誰啟動了這個 Activity ,那么這個 Activity 就運行在啟動它的那個 Activity 所在的棧中比如, Activity A啟動了 Activity B(B 是標準模式),那么 B 就會進入 A 所在的棧中。
2.singleTop: 棧頂復用模式。在這種模式下如果新Activity已經位于任務棧的棧頂,那么此 Activity 不會被重新創建,同時它的 onNewIntent 方法會被毀掉,通過此方法的參數我們可以取出當前請求的信息。需要注意的是, 這個 Activity 的 onCreate 、onStart 不會被系統調用,因為他并沒有發生改變。如果新的 Activity 的實例已經存在但不是位于棧頂,那么新 Activity 仍然會重建。舉個例子,一個 Activity 棧有 A B C D 四個 Activity,A 在棧底,D 在棧頂,這個時候再次啟動 D 。如果 D 的啟動模式為 singleTop,那么棧內的情況仍然是 A B C D 。如果 D 的啟動模式為 standard, 那么由于 D 被重新創建,導致棧內的情況就變為 A B C D D 。
3.singleTask: 棧內復用模式。這是一種單實例模式,在這種模式下,只要 Activity 在一個棧中存在,那么多次啟動此 Activity 都不會重新創建實例,和 singleTop 一樣,系統也會調用 onNewIntent 。具體一點,當一個具有 singleTask 模式的 Activity 請求啟動后,比如 Activity A, 系統首先會尋找是否存在A想要的任務棧, 如果不存在,就重新創建一個任務棧,然后創建 A 的實例把 A 放入棧中。
4.singleInstance: 單實例模式。這是一種加強的 singleTask 模式,它除了具有 singleTask 模式的所有特性外,還加強了一點,那就是具有此種模式的 Activity 只能單獨的位于一個任務棧中,換句話說,比如 Activity A 是 singleInstance 模式,當A啟動后,系統會為它創建一個新的任務棧,然后 A 獨自運行在這個新的任務棧中, 由于棧內復用的特性,后續的請求均不會創建新的 Activity , 除非這個獨特的任務棧被系統銷毀了。

浙公網安備 33010602011771號