Android Activity’s Four LaunchMode
1、standard
standard模式是默認的模式,可以不用再manifest文件裏面聲明。這種模式在應用中比較常見,當我們啓動一個standard模式的activity時,系統會將新的activity壓入啓動它的activity所在的棧裏面,當我們按回退鍵時在棧頂的activity就會出棧。實際上就是一般入棧出棧操作。
- 啓動
到這裏再開始點擊回退鍵
再點一次就回到了主界面
2、singleTop
棧頂複用能夠避免同一個activity在棧頂重複出現,在一個程度上節約了內存控件,舉一個例子,當我們重通知欄裏面點擊一個信息,啓動一個activity,如果這個activity剛好在該棧的棧頂,那麼就可以複用這個activity,而不是又重新啓動一個一樣的activity。
進入在singleTop模式的activity
這裏我們再點擊“跳轉自己”,會發現並不會出現什麼情況,但是實際上他會執行如下回調方法
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
當我們點擊第二個按鈕時,進入第五個activity,這個activity時standard模式,再點擊當前頁面按鈕。
這時會回到第五個activity,此時棧內是有兩個FourActivity,即兩個singleTop模式的activity。(不想截圖了-_-)
所以,singleTop模式只有再棧頂的時候纔不會被覆蓋,如果不在棧頂就可以被覆蓋,正如它的名字一樣,棧頂複用。
3、singleTask
棧內複用就是隻要該activity再棧裏面,就不會出現與之相同的activity,原因是當你啓動相同的activity時,它會去複用之前的activity。並且將在被複用activity上面的所有activity出棧。這種模式多用在mainActivity。
點擊跳轉到MainActivity
這時再點擊返回按鈕,會直接回到桌面。說明此時MainActivity就在棧頂,並且棧內再沒有其他的activity了。
4、單例模式
作爲棧內複用模式(singleTask)的加強版,打開該Activity時,直接創建一個新的任務棧,並創建該Activity實例放入新棧中。一旦該模式的Activity實例已經存在於某個棧中,任何應用再激活該Activity時都會重用該棧中的實例。點擊第四個按鈕。
此時我們可以看到出現兩個任務棧。這裏注意在manifest文件裏對應的activity標籤裏添加android:taskAffinity=“instance.test”,不然不會出現兩個任務棧。