android Activity launch mode 知識點總結

來源:互聯網
上載者:User

標籤:

閱讀

http://my.oschina.net/u/1244156/blog/228483

 

FLAG_ACTIVITY_NEW_TASK  

會啟動被調用者TaskAffinity(如果不定義預設就是所在的Application的包名)決定的Task棧 (即 如果 只有A,B的應用,開啟應用 A帶newTask啟動B還是在同一Task棧中)

FLAG_ACTIVITY_CLEAR_TOP  

清除Task棧中被調用者以上的Activity(包括調用者,即調用B的onDestroy,onCreate方法)  

FLAG_ACTIVITY_SINGLE_TOP

如果棧頂是被調用者 則直接調用onNewIntent()方法

註:FLAG_ACTIVITY_CLEAR_TOP 並且 FLAG_ACTIVITY_SINGLE_TOP 相當於 launchMode 中的 singleTask,singleInstance 即:清除Activity以上者且調用onNewIntent方法

FLAG_ACTIVITY_BROUGHT_TO_FRONT  

如果activity在task存在,拿到最頂端,不會啟動新的Activity

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 

如果一個Intent中包含此屬性,則它轉向的那個Activity以及在那個Activity其上的所有Activity都會在task重設時被清除出task。當我們將一個背景task重新回到前台時,系統會在特定情況下為這個動作附帶一個FLAG_ACTIVITY_RESET_TASK_IF_NEEDED標記,意味著必要時重設task,這時FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET就會生效。

註:

經過測試發現,對於一個處於背景應用,如果在主選單點擊應用,這個動作中含有FLAG_ACTIVITY_RESET_TASK_IF_NEEDED標記,長按Home鍵,然後點擊最近記錄,這個動作不含FLAG_ACTIVITY_RESET_TASK_IF_NEEDED標記,所以前者會清除,後者不會。關於這個標記,可以示之:

 

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

1.啟動Activity時建立新的task來放置Activity執行個體;2.已存在的task被放置於前台。系統會根據affinity對指定的task進行重設操作,task會壓入某些Activity執行個體或移除某些Activity執行個體。

註:從launcher中啟動app

 

<activity>的task相關屬性

1.android:allowTaskReparenting

標記一個Activity執行個體在當前應用退居後台後,是否能從啟動它的那個task移動到有共同affinity的task,“true”表示可以移動,“false”表示它必須呆在當前應用的task中,預設值為false。

eg:例如在一個應用中要查看一個web頁面,在啟動系統瀏覽器Activity後,這個Activity執行個體和當前應用處於同一個task,當我們的應用退居後台之後使用者再次從主選單中啟動應用,此時這個Activity執行個體將會重新宿主到Browser應用的task內,在我們的應用中將不會再看到這個Activity執行個體,而如果此時啟動Browser應用,就會發現,第一個介面就是我們剛才開啟的web頁面,證明了這個Activity執行個體確實是宿主到了Browser應用的task內。

 

 

2.android:alwaysRetainTaskState

這個屬性用來標記應用的task是否保持原來的狀態,“true”表示總是保持,“false”表示不能夠保證,預設為“false”。此屬性只對task的根Activity起作用,其他的Activity都會被忽略。

預設情況下,如果一個應用在後台呆的太久例如30分鐘,使用者從主選單再次選擇該應用時,系統就會對該應用的task進行清理,除了根Activity,其他Activity都會被清除出棧,但是如果在根Activity中設定了此屬性之後,使用者再次啟動應用時,仍然可以看到上一次操作的介面。

這個屬性對於一些應用非常有用,例如Browser應用程式,有很多狀態,比如開啟很多的tab,使用者不想丟失這些狀態,使用這個屬性就極為恰當。

3.android:clearTaskOnLaunch

這個屬性用來標記是否從task清除除根Activity之外的所有的Activity,“true”表示清除,“false”表示不清除,預設為“false”。同樣,這個屬性也只對根Activity起作用,其他的Activity都會被忽略。

如果設定了這個屬性為“true”,每次使用者重新啟動這個應用時,都只會看到根Activity,task中的其他Activity都會被清除出棧。如果我們的應用中引用到了其他應用的Activity,這些Activity設定了allowTaskReparenting屬性為“true”,則它們會被重新宿主到有共同affinity的task中。

 

 

4.android:finishOnTaskLaunch

這個屬性和android:allowReparenting屬性相似,不同之處在於allowReparenting屬性是重新宿主到有共同affinity的task中,而finishOnTaskLaunch屬性是銷毀執行個體。如果這個屬性和android:allowReparenting都設定為“true”,則這個屬性勝出

android Activity launch mode 知識點總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.