Activity 啟動模式,activity啟動模式
Activity的啟動模式有四種,分別是standard、singleTop、singleTask、singleInstance。
Android是通過回退棧的模式來管理Activity實例的。棧是一種先進後出的集合。比如我們打開一個Activity,當前顯示的就是在棧的最頂端,當用戶點擊後退或者是應用的返回按鈕的時候,此時系統就會將棧頂的Activity出棧,那麼在原來棧頂的下一個Activity就會變成棧頂從而顯示在設備上。
standard
默認模式,可以不用寫配置。在這個模式下,都會默認創建一個新的實例。因此,在這種模式下,可以有多個相同的實例,也允許多個相同Activity疊加。就是說同一個任務棧中可以有多個Activity存在。
例如:
如果ActivityA已經存在了,在這個ActivityA調用它的startActivity()啟動一個新的ActivityA,那麼這是就是有兩個ActivityA了。
singleTop
可以有多個實例,但是不允許多個相同Activity疊加。即,如果Activity在棧頂的時候,啟動相同的Activity,不會創建新的實例,而是重用這個在棧頂的Activity,並且會調用其onNewIntent方法。
singletop模式,如果新啟動一個新的實例,不在棧頂的話會重新創建一個新的實例,那麼他的行為就跟standard模式一樣。
singleTask
只有一個實例。在同一個應用程序中啟動他的時候,若Activity不存在,則會在當前task創建一個新的實例,若存在,則會把task中在其之上的其它Activity destory掉並調用它的onNewIntent方法。
如果是在別的應用程序中啟動它,則會新建一個task,並在該task中啟動這個Activity,singleTask允許別的Activity與其在一個task中共存,也就是說,如果我在這個singleTask的實例中再打開新的Activity,這個新的Activity還是會在singleTask的實例的task中。
singleInstance
只有一個實例,並且這個實例獨立運行在一個task中,這個task有且只有一個實例,不允許有別的Activity存在。當再次啟動該Activity的時候,會重用已存在的任務和實例。
singletask與singleInstance不同的是,singletask在一個任務中只有一個實例,singleinstance在整個系統中只能有一個,singletask在不同的任務中是可以存在多個實例的。