1. 程式人生 > >Android Activity 的四種啟動模式

Android Activity 的四種啟動模式

在實際開發中,應根據特定的需求為每個Activity制定恰當的啟動模式。Activityde 的啟動模式有四種。分別是standard、singleTop、singleTask和singleInstance。在AndroidManifest.xml中,通過<activity>標籤的android:launchMode屬性可以設定啟動模式。下面針對四種啟動模式分別進行介紹。

1.standard模式

standard是Activity預設的啟動模式,在不指定Activity啟動模式的情況下,所有Activity使用的都是standard模式。

在standard模式下,每當啟動一個新的Activity,它就會進入任務棧,並處於棧頂的位置,對於使用standard模式的Activity,系統不會判斷該Activity在棧中是否存在,每次啟動都會建立一個新的例項。下圖所示的是standard啟動模式下Activity在棧中的存放情況:

從圖中我們可以看出,在standard啟動模式下Activity01最先進棧,其次是Activity02,最後是Activity03;出棧時,Activity03最先出棧,其次是Activity02,最後是Activity01,滿足“先進後出”的原則。

2.singleTop模式

singleTop模式與standard類似,不同的是,當啟動的Activity已經位於棧頂時,則直接使用它不建立新的例項。如果啟動的Activity沒有位於棧頂時,則建立一個新的例項位於棧頂。下圖所示的是singleTop模式下Activity在棧中的存放情況:

從圖中我們可以看出,當前棧頂中的元素是Activity03,如果再次啟動的介面還是Activity03,則複用當前棧頂的Activity例項,如果再次啟動的介面沒有位於棧頂,則會重新建立一個例項。

3.singleTask模式

如果希望Activity在整個應用程式中只存在一個例項,可以使用singleTask模式,當Activity的啟動模式指定為 singleTask,每次啟動該Activity時,系統首先會檢查棧中是否存在該Activity的例項,如果發現已經存在則直接使用該例項,並將當前Activity之上的所有Activity出棧,如果沒有發現則建立一個新的例項。下圖所示的是singleTask模式下的Activity在棧中的存放情況:


從圖中可以看出,當再次啟動Activity02時,並沒有建立新的例項,而是將Activity03例項移除,複用Activity02 例項,這就是singleTask模式,讓某個Activity在當前棧中只存在一個例項。

4.singleInstance模式

在程式開發過程中,如果需要Activity在整個系統中都只有一個例項,這時就需要用到singleInstance模式。不同於以上介紹的三種模式,指定為singleInstance模式的Activity會啟動一個新的任務棧來管理這個Activity。

singleInstance模式載入Activity時,無論從哪個任務棧中啟動該Activity,只會建立一個Activity例項,並且會使用一個全新的任務棧來裝載該Activity例項。採用這種模式啟動Activity會費為一下兩種情況:

第一種:如果要啟動的Activity不存在,系統會建立一個新的任務棧,在建立該Activity的例項,並把該Activity加入棧頂,如下圖所示:


第二種::如果要啟動的Activity已經存在,無論位於哪個應用程式或者哪個任務棧中,系統都會把該Activity所在的任務棧轉到前臺,從而使該Activity顯示出來。

至此,Activity的四種啟動模式已經講解完成,在實際開發中,需要根據實際情況來選擇合適的啟動模式。