Android系統採用任務棧的方式來管理Activity實例。 棧是後進先出的數據結構。通常一個應用程式對應一個任務棧,預設情況下,每啟動一個Activity都會入棧,處於棧頂位置。用戶操作的永遠都是棧頂的Activity。 Activity可以層疊擺放,每啟動一個新的Activity都會覆蓋在原A ...
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模式。