Android任務棧的四種模式和應用場景
阿新 • • 發佈:2019-02-17
通過Acitivty的xml標籤來改變任務棧的預設行為
-
在清單檔案中使用
android:launchMode="standard|singleInstance|singleTask|singleTop"
來控制Acivity任務棧。任務棧是一種後進先出的結構。位於棧頂的Activity處於焦點狀態,當按下back按鈕的時候,棧內的Activity會一個一個的出棧,並且呼叫其
onDestory()
方法。如果棧內沒有Activity,那麼系統就會回收這個棧,每個APP預設只有一個棧,以APP的包名來命名.- standard : 標準模式,每次啟動Activity都會建立一個新的Activity例項,並且將其壓入任務棧棧頂,而不管這個Activity是否已經存在。Activity的啟動三回撥(onCreate()->onStart()->onResume()
- singleTop : 棧頂複用模式.這種模式下,如果新Activity已經位於任務棧的棧頂,那麼此Activity不會被重新建立,所以它的啟動三回撥就不會執行,同時Activity的
onNewIntent()
方法會被回撥.如果Activity已經存在但是不在棧頂,那麼作用於standard模式一樣. - singleTask: 棧內複用模式.建立這樣的Activity的時候,系統會先確認它所需任務棧已經建立,否則先建立任務棧.然後放入Activity,如果棧中已經有一個Activity例項,那麼這個Activity就會被調到棧頂,
onNewIntent()
,並且singleTask會清理在當前Activity上面的所有Activity.(clear top) - singleInstance : 加強版的singleTask模式,這種模式的Activity只能單獨位於一個任務棧內,由於棧內複用的特性,後續請求均不會建立新的Activity,除非這個獨特的任務棧被系統銷燬了
- standard : 標準模式,每次啟動Activity都會建立一個新的Activity例項,並且將其壓入任務棧棧頂,而不管這個Activity是否已經存在。Activity的啟動三回撥(onCreate()->onStart()->onResume()
- 應用場景: 轉載自:http://www.cnblogs.com/shaoshao/p/5859206.html
-
singleTop 適合接收通知啟動的內容顯示頁面。例如,某個新聞客戶端的新聞內容頁面,如果收到10個新聞推送,每次都開啟一個新聞內容頁面是很煩人的。 從外界可能多次跳轉到一個介面 singleTask適合作為程式入口點。
-
例如瀏覽器的主介面。不管從多少個應用啟動瀏覽器,只會啟動主介面一次,其餘情況都會走onNewIntent,並且會清空主介面上面的其他頁面。 之前開啟過的頁面,開啟之前的頁面就ok,不再新建 singleInstance電話,鬧鐘. 適合需要與程式分離開的頁面。例如鬧鈴提醒,將鬧鈴提醒與鬧鈴設定分離。singleInstance不要用於中間頁面,如果用於中間頁面,跳轉會有問題,比如:A