Activity四種啓動模式總結

一、standard-默認模式

  這個模式是默認的啓動模式,即標準模式,在不指定啓動模式的前提下,系統默認使用該模式啓動Activity,每次啓動一個Activity都會重寫創建一個新的實例,不管這個實例存不存在,這種模式下,誰啓動了該模式的Activity,該Activity就屬於啓動它的Activity的任務棧中。這個Activity它的onCreate(),onStart(),onResume()方法都會被調用。 


二、singleTop-棧頂複用模式

這個模式下,如果新的activity已經位於棧頂,那麼這個Activity不會被重寫創建,同時它的onNewIntent方法會被調用,通過此方法的參數我們可以去除當前請求的信息。如果棧頂不存在該Activity的實例,則情況與standard模式相同。需要注意的是這個Activity它的onCreate(),onStart()方法不會被調用,因爲它並沒有發生改變。

對以上兩點內容進行總結 :

       standard啓動模式是默認的啓動模式,每次啓動一個Activity都會新建一個實例不管棧中是否已有該Activity的實例。 

singleTop模式分3種情況

  1. 當前棧中已有該Activity的實例並且該實例位於棧頂時,不會新建實例,而是複用棧頂的實例,並且會將Intent對象傳入,回調onNewIntent方法
  2. 當前棧中已有該Activity的實例但是該實例不在棧頂時,其行爲和standard啓動模式一樣,依然會創建一個新的實例
  3. 當前棧中不存在該Activity的實例時,其行爲同standard啓動模式

三、singleTask-棧內複用模式

這個模式十分複雜,有各式各樣的組合。在這個模式下,如果棧中存在這個Activity的實例就會複用這個Activity,不管它是否位於棧頂,複用時,會將它上面的Activity全部出棧,並且會回調該實例的onNewIntent方法。其實這個過程還存在一個任務棧的匹配,因爲這個模式啓動時,會在自己需要的任務棧中尋找實例,這個任務棧就是通過taskAffinity屬性指定。如果這個任務棧不存在,則會創建這個任務棧。 


四、singleInstance-全局唯一模式


該模式具備singleTask模式的所有特性外,與它的區別就是,這種模式下的Activity會單獨佔用一個Task棧,具有全局唯一性,即整個系統中就這麼一個實例,由於棧內複用的特性,後續的請求均不會創建新的Activity實例,除非這個特殊的任務棧被銷燬了。以singleInstance模式啓動的Activity在整個系統中是單例的,如果在啓動這樣的Activiyt時,已經存在了一個實例,那麼會把它所在的任務調度到前臺,重用這個實例。 

singleTask啓動模式啓動Activity時,首先會根據taskAffinity去尋找當前是否存在一個對應名字的任務棧

  1. 如果不存在,則會創建一個新的Task,並創建新的Activity實例入棧到新創建的Task中去
  2. 如果存在,則得到該任務棧,查找該任務棧中是否存在該Activity實例 
  3. 如果存在實例,則將它上面的Activity實例都出棧,然後回調啓動的Activity實例的onNewIntent方法 
  4. 如果不存在該實例,則新建Activity,併入棧


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章