Android的任務棧簡介、AndroidMainifest啓動模式、Intent Flag啓動模式

1.Android任務棧簡介

1.Android系統,通過棧結構來保存整個App的Activity,棧底的元素是整個任務棧的發起者;

2.App啓動的時候,如果當前環境中不存在該App的任務棧,那麼系統就會創建一個任務棧,此後,這個App所啓動的Activity都將在這個任務棧中被管理,這個棧也被稱爲一個Task,也就是若干個Activity的集合組成一個Task。要注意的是,一個Task中的Activity可以來自不同的App,也可以來自同一個App;

3.棧結構:先進先出的線性表。

2.AndroidMainifest啓動模式

1.standard:默認的啓動模式,如果不指定Activity的啓動模式,則使用這種方式啓動Activity。每次啓動界面,都會創建一個新的實例處理任務棧頂部,當用戶按下返回鍵或者調用finish()方法的時候,系統會移除棧頂部的Activity。 

2.singleTop:啓動時,系統會判斷當前棧頂Activity是不是您要啓動的Activity,如果是,則直接使用,如果不是,重新創建Activity。用於:接收到信息後顯示的界面。但系統仍然會在創建Activity的時候調用onNewIntent()方法。

3.singleTask:與singleTop模式類似,只不過singleTop檢查頂元素是不是需要啓動的Activity,而singleTask是檢測整個任務棧裏面是否存在當前需要啓動的Activity。如果存在,則將該Activity置於棧頂,並將該Activit以上的Activity都銷燬了(針對的是同一個app),如果是其他程序以singleTask的模式來啓動Activity,那麼它將創建一個新的任務棧。
    退出整個應用:將住Activity設置爲singleTask模式,然後在要要退出的Activity中轉到豬Activity,從而將主Activity之上的Activity都清除,然後重寫主Activity的onNewIntent()方法,在方法中加上一句finish(),將最後一個Activity結束掉。

4.singleInstance:任務棧只存在一個Activity,如果應用A的任務棧中創建MainActivity實例,啓動模式爲singleInstance,如果應用B也激活MainActivity實例,則不需要創建,兩個應用共享該Activity實例。常用於需要與程序分離的界面。

5.singleTop與singleInstance的區別:如果在一個singleTop或者singleInstance的Activity中通過startActivityForResult()方法來啓動另一個ActivityB,那麼系統將直接返回Activity.RESULT_CANCELED而不會再去等待返回。這是由於系統在Framework層做了對這兩種啓動模式的限制,因爲Android開發者認爲,不同Task之間,默認是不能傳遞數據的,如果一定要傳遞,那就只能通過Intent來綁定數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章