1. 程式人生 > >Android任務棧的四種模式和應用場景

Android任務棧的四種模式和應用場景

通過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,除非這個獨特的任務棧被系統銷燬了
  • 應用場景:   轉載自:http://www.cnblogs.com/shaoshao/p/5859206.html
  • singleTop   適合接收通知啟動的內容顯示頁面。例如,某個新聞客戶端的新聞內容頁面,如果收到10個新聞推送,每次都開啟一個新聞內容頁面是很煩人的。
    
    從外界可能多次跳轉到一個介面
    
    singleTask適合作為程式入口點。
  • 例如瀏覽器的主介面。不管從多少個應用啟動瀏覽器,只會啟動主介面一次,其餘情況都會走onNewIntent,並且會清空主介面上面的其他頁面。
    
    之前開啟過的頁面,開啟之前的頁面就ok,不再新建
    
    singleInstance電話,鬧鐘.   適合需要與程式分離開的頁面。例如鬧鈴提醒,將鬧鈴提醒與鬧鈴設定分離。singleInstance不要用於中間頁面,如果用於中間頁面,跳轉會有問題,比如:A 
    -> B (singleInstance) -> C,完全退出後,再次啟動,首先開啟的是B。 某個應用中用到了google地圖,當退出該應用的時候,進入google地圖,還是剛才的介面