Acitivity啓動模式

Android有四種啓動模式:standard、singleTop、singleTask、singleInstance。

1、standard(拿來主義)

Android默認啓動模式,每次啓動一個Activity都會創建一個新的實例,無論這個實例是否已經存在,然後將該實例加入到啓動他的任務棧中,會走Acitivity的各個生命週期,是一種典型的多實例實現。注意:當用ApplicationContext啓動一個standard模式的Acitivity時會報錯,

Android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.   
Is this really what you want?

這是因爲ApplicationContext是一個非Acitivity類型的Context,它沒有所謂的任務棧,相當於沒有指定它沒有任務棧可以放,你需要爲待啓動的Acitvity指定<pre name="code" class="java">FLAG_ACTIVITY_NEW_TASK標記位,這樣的話相當於創建了另一個新的任務棧,也就相當與另一種啓動模式——singleTask了

2、singleTop(相鄰和並)

即棧頂複用模式。Acitivity啓動時如果該Activity已經位於任務棧的棧頂,那麼不會重新創建新的實例,同時會回調它的onNewIntent方法,通過這個方法的參數我們可以取出當前請求的信息。當然了,不會走onCreate和onStart方法。如果新的Activity的實例已經存在但不位於棧頂,那麼新Activity仍會重新創建。

3、singleTask(唯我獨尊)

即棧內複用模式、單實例模式。只要Activity在一個棧中存在,那麼多次啓動Activity就不會再次創建Activity實例,同singleTop一樣,會回調onNewIntent方法。

4、singleInstance(獨居主義)

單實例模式,加強版singleTask,加強點爲此種模式的Activity只能單獨地位於一個任務棧中,即當啓動singleInstance模式的Acitivity時,系統會爲它創建一個新的任務棧,然後它獨自在這個新的任務棧中由於站內複用的特性,後續的請求均不會創建新的Activity,除非這個獨特的任務棧被銷燬了。

設置啓動模式有兩種:

1、AndroidMenifest.xml中:android:launchMode="singleTask"

2、intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

區別:第二種優先級高於第一種;第一種無法爲Activity設定FLAG_ACTIVITY_CLEAR_TOP,第二種無法爲Activity指定singleInstance模式。

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