Android Activity的啟動模式


 

Android系統采用任務棧的方式來管理Activity實例。

 

棧是后進先出的數據結構。通常一個應用程序對應一個任務棧,默認情況下,每啟動一個Activity都會入棧,處於棧頂位置。用戶操作的永遠都是棧頂的Activity。

 

Activity可以層疊擺放,每啟動一個新的Activity都會覆蓋在原Activity之上(入棧),單擊返回按鈕,最上面的Activity會被銷毀,下面的Activity重新顯示。

 

 

 

Activity有4種啟動模式:

1、standard模式

上面介紹的模式就是standard模式。standard模式是Activity默認的啟動模式。每啟動一個Activity就在棧頂創建一個新的實例。

鬧鍾通常采用此種模式。

 

2、singleTop模式

如果有時候satndard模式並不合理,比如當前Activity已處於棧頂,再次啟動此Activity會重新創建實例,不會直接復用。

singleTop顧名思義,棧頂單例。

將某個Activity的啟動模式設置為singleTop,啟動此Activity時,會先檢查棧頂是否是此Activity的實例,如果是,則直接復用,如果不是,才創建實例。

瀏覽器的書簽通常采用此種模式。

 

3、singleTask模式

singleTop模式有一定的缺陷,當棧中有此Activity的實例,但未處於棧頂時,仍會創建實例,棧中可能會存在此Activity的多個實例。

singleTask,顧名思義,任務棧中只有一個實例。

啟動某個Activity時,會先檢查任務棧中是否有該Activity的實例,有就直接復用(把前面所有的Activity出棧),沒有才創建並入棧。

瀏覽器的主界面通常采用此模式。

 

4、singleInstance模式

會啟動一個新的任務棧來管理當前程序中singleInstance模式啟動的Activity,在Android系統中,該Activity只有一個實例。

這種模式主要是為了,在不同程序間共享同一個Activity實例。

啟動Activity時,若Android系統中不存在該Activity的實例,則創建並入棧;若已存在,不管此實例位於哪個程序的哪個任務棧中,系統都會把該任務棧轉移到前台,顯示該實例。

來電界面通常使用此模式。

 

 

 

可在AndroidManifest.xml文件對應的 <activity />元素中用 launchMode屬性 指定啟動模式:

1  <activity
2             android:name=".Activity2"
3             android:label="@string/title_activity_2"
4             android:theme="@style/AppTheme.NoActionBar"
5             android:launchMode="singleTask">   <!-- 指定此Activity的啟動模式-->
6 </activity>

缺省時默認為standard模式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM