Activity、Fragment啓動總結

1、actvity的啓動過程

流程圖

2、Fragment啓動過程


OnAttach():當該fragment被添加到Activity時被回調,該方法值會被調用一次。

onCreate(Bundle savedStatus):創建Fragment時被回調,該方法只會被調用一次。

onCreateView():每次創建、繪製該Fragment的View組件時,回調該方法,Fragment將會顯示該方法返回的View組件。

onActivityCreated():當Fragment所在的Activity被啓動完成後回調該方法。

onStart():啓動Fragment時被回調。

OnResume():恢復Fragment時被回調,onStart()方法後一定會回調onResume()方法。

onPause():暫停Fragment時被回調。

onStop():停止Fragment時被回調。

onDestroyView():銷燬Fragment所包含的View組件時調用。

onDestroy():銷燬Fragment時被回調,該方法只會被調用一次。

onDetach():將該Fragment從Activity中被刪除、被替換完成時回調該方法,onDestroy()方法後一定會回調onDetach()方法,該方法只會被調用一次。

3、Activity啓動方式

standard-默認模式

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

singleTop-棧頂複用模式

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

singleTask-棧內複用模式

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

singleInstance-全局唯一模式

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

4、Activity啓動flag

Activity的taskAffinity屬性: 每個Activity都有taskAffinity屬性,這個屬性指出了它希望進入的Task。如果一個Activity沒有顯式的指明該 Activity的taskAffinity,那麼它的這個屬性就等於Application指明的taskAffinity,如果 Application也沒有指明,那麼該taskAffinity的值就等於包名。而Task也有自己的affinity屬性,它的值等於它的根 Activity的taskAffinity的值。

FLAG_ACTIVITY_NEW_TASK

默認的跳轉類型,它會重新創建一個新的Activity,不過與這種情況,比如說Task1中有A,B,C三個Activity,此時在C中啓動D的話,如果在AndroidManifest.xml文件中給D添加了Affinity的值和Task中的不一樣的話,則會在新標記的Affinity所存在的Task中壓入這個Activity。如果是默認的或者指定的Affinity和Task一樣的話,就和標準模式一樣了啓動一個新的Activity.

FLAG_ACTIVITY_SINGLE_TOP

類似於singleTop

FLAG_ACTIVITY_CLEAR_TOP

類似於singleTask

FLAG_ACTIVITY_BROUGHT_TO_FRONT

在A中啓動B,此時在A中Intent中加上這個標記。此時B就是以FLAG_ACTIVITY_BROUGHT_TO_FRONT方式啓動,此時在B中再啓動C,D(正常啓動C,D),如果這個時候在D中再啓動B,這個時候最後的棧的情況是 A,C,D,B。如果在A,B,C,D正常啓動的話,不管B有沒有用FLAG_ACTIVITY_BROUGHT_TO_FRONT啓動,此時在D中啓動B的話,還是會變成A,C,D,B的。

FLAG_ACTIVITY_NO_HISTORY

以這個FLAG啓動的Activity,一旦退出,它不會存在於棧中









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