1. 程式人生 > >Android——活動的啟動模式

Android——活動的啟動模式

實現 模式 etop androi 目前 rst standard instance 學習活動

活動的啟動模式分為:standard、singleTop、singleTask、singleInstance四種。

standard模式

是活動默認的啟動模式,是在學習活動跳轉時最先接觸的模式。這個啟動模式無視棧頂的活動,在實現Intent跳轉後就會創建一個新的活動(即使是同一個活動)。例如:

Intent intent=new Intent(FirstActivity.this, FirstActivity.class);

startActivity(intent);

當你在FirstActivity點擊觸發跳轉時,將會有一個新的FirstActivity被創建。持續點擊觸發跳轉則會在返回棧中持續堆疊FirstActivity活動。

singleTop模式

修改上一個案例中的AndroidManifest.xml中FirstActivity的啟動模式,添加:android:launchMode=”singleTop”。再次運行,你點擊觸發跳轉時將會發現,FirstActivity活動不會再被創建,因為此時FirstActivity已經位於返回棧的棧頂。這就是singleTop啟動模式的特點:當你想要啟動的活動位於目前返回棧的頂部時,將不會重新創建新的活動,而是使用棧頂的活動,因此FirstActivity也只會有一個實例。不過如果你想啟動的活動不位於目前返回棧的頂部的話,還是與standard模式相同,創建一個新的實例,所以這也是singletop的一個問題,singleTask的出現就可以解決這個問題。

singleTask模式

當活動的啟動模式指定為singleTask時,每次啟動該活動時系統首先會在返回棧中檢查是否存在該活動的實例。如果存在,則直接使用該實例。由於棧後進先出的特性,假如該活動的上面還存在其他實例,在使用該活動的時候會讓該活動上的其他活動統統出棧。如果不存在,那麽就創建一個新的活動實例。

singleInstance模式

singleInstance是這四種啟動模式中最特殊也最復雜的一個模式。singleInstance適用於那些其他程序調用這個程序活動的情況。因為每個程序都有自己的返回棧,同一個活動在不同的返回棧中入棧事必然會創建新的實例,使用singleInstance模式就會有一個單獨的返回棧來管理這個活動,無論哪個程序來使用,都會共用同一個返回棧,解決了多程序共享的問題。例如,目前有A、B、C三個活動,其中B活動的啟動模式為singleInstance,A、C為默認的standard模式。活動的跳轉流程為A->B->C。當你完成從A到C的跳轉後,在C界面按下Back鍵,會發現C返回到了A,再點擊Back鍵,A返回到了B。這就說明,A與C在同一個返回棧中,A入棧後,C進入同一個棧。而B進入了另一個棧。所以C返回到了A,然後在A界面點擊Back時,因為此時A所在的棧已空,所以就顯示另一個棧的棧頂——也就是B所在的棧,於是B顯示出來。此時再點擊Back鍵,所有實例都出棧,程序也就自然退出了。

Android——活動的啟動模式