天天看點

Activity啟動模式的總結

Activity有四種啟動模式:分别是standard,singleTop,singleTask和singleInstance。

提起啟動模式,不得不說下任務棧:

任務棧Task,是一種用來放置Activity執行個體的容器,他是以棧的形式進行盛放,也就是所謂的先進後出,主要有2個基本操作:壓棧和出棧,其所存放的Activity是不支援重新排序的,隻能根據壓棧和出棧操作更改Activity的順序。

啟動一個Application的時候,系統會為它預設建立一個對應的Task,用來放置根Activity。預設啟動Activity會放在同一個Task中,新啟動的Activity會被壓入啟動它的那個Activity的棧中,并且顯示它。當使用者按下回退鍵時,這個Activity就會被彈出棧,按下Home鍵回到桌面,再啟動另一個應用,這時候之前那個Task就被移到背景,成為背景任務棧,而剛啟動的那個Task就被調到前台,成為前台任務棧,手機頁面顯示的就是前台任務棧中的棧頂元素。

(1)standard:Android預設啟動模式,每次啟動Activity,都會建立一個執行個體,并加到任務棧。在這種模式下,誰啟動了這個Activity,則此Activity就運作在啟動它那個Activity所在的任務棧中。

(2)singleTop:棧頂複用模式,在此模式下,如果待啟動的Activity位于棧頂,則不建立執行個體,而是回調其onNewIntent的方法(此模式能解決啟動延遲情況下,使用者多次觸發按鈕,打開多個Activity的bug)。

(3)singleTask: 棧内複用模式,如果Activity使用這種模式啟動時,如果其所需的任務棧已經建立(根據taskAffinity來判斷所需任務棧),而該Activity的執行個體未建立,則建立該Activity,并把該執行個體壓入棧中。如果任務棧未建立,則建立任務棧,并建立執行個體入棧。如果任務棧和執行個體均已建立,則此時則會把該執行個體移到棧頂,執行個體上面的Activity則被清出棧。

(4)singleInstance:單執行個體模式,具有此模式的Activity隻能單獨的位于一個任務棧中,并且此任務棧隻有該執行個體。應用場景:呼叫來電界面。