Activity中的intent的FLAG代表的意義

Activity中的intent的FLAG代表的意義吐舌頭

Task和Activity的關係如下::

  Task任務棧,就像一個樹立的容器,而Activity就是填充這個容器的東西,第一個東西(Activity)則會處於最下面,最後添加的東西(Activity)則會在最上面。從Task中取出東西(Activity)是從最頂端取出,也就是說最先取出的是最後添加的東西(Activity),當然,最後取出的是第一次添加的Activity,而Activity在Task中的順序是可以控制的,在Activity跳轉時用到Intent Flag可以設置新建activity的創建方式,這個和Activity的四種加載模式非常類似.

(1)  Intent.FLAG_ACTIVITY_NEW_TASK

  默認的跳轉類型,會重新創建一個新的Activity,不過與這種情況,比方說Task1中有A,B,C三個Activity,此時在C中啓動D的話,如果在Manifest.xml文件中給D添加了Affinity的值和Task中的不一樣的話,則會在新標記的Affinity所存在的Task中壓入這個Activity。如果是默認的或者指定的Activity和Task一樣的話,就和標準模式一樣了啓動一個新的Activity.

 (2) FLAG_ACTIVITY_SINGLE_TOP

 這個FLAG就相當於加載模式中的singletop,例如原來棧中情況是A,B,C,D在D中啓動D,棧中的情況還是A,B,C,D

 (3)FLAG_ACTIVITY_CLEAR_TOP

 這個FLAG就相當於Activity加載模式中的SingleTask,這種FLAG啓動的Activity會把要啓動的Activity之上的Activity全部彈出棧空間。類如:原來棧中的情況是A,B,C,D這個時候從D中跳轉到B,這個時候棧中的情況就是A,B了,把他上面的全部銷燬..

 (4)FLAG_ACTIVITY_BROUGHT_TO_FRONT

  我的理解是這樣的,比方說我現在有A,在A中啓動B,此時在A中Intent中加上FLAG_ACTIVITY_BROUGHT_TO_FRONT標記。此時B就是以FLAG_ACTIVITY_BROUGHT_TO_FRONT 這個啓動的,此時在B中再啓動C,D(正常啓動C,D),如果這個時候在D中再啓動B,這個時候最後的棧的情況是 A,C,D,B,和singtask的區別就是他不會銷燬自己上面的Activity,直接自己就跳到了最上面了..

 (5) FLAG_ACTIVITY_REORDER_TO_FRONT

  如果在A,B,C,D正常啓動的話,不管B有沒有用FLAG_ACTIVITY_BROUGHT_TO_FRONT啓動,此時在D中啓動B的話,還是會變成A,C,D,B的。

  (6)FLAG_ACTIVITY_NO_USER_ACTION

  onUserLeaveHint()作爲activity週期的一部分,它在activity因爲用戶要跳轉到別的activity而要退到background時使用。
比如,在用戶按下Home鍵(用戶的choice),它將被調用。比如有電話進來(不屬於用戶的choice),它就不會被調用。
那麼系統如何區分讓當前activity退到background時使用是用戶的choice?
它是根據促使當前activity退到background的那個新啓動的Activity的Intent裏是否有      FLAG_ACTIVITY_NO_USER_ACTION來確定的
注意:通過調用finish()使該activity銷燬時不會調用該函數

 (7)FLAG_ACTIVITY_NO_HISTORY

用這個FLAG啓動的Activity,一旦推出,他就不會存在於棧中,比方說!原來是A,B,C 這個時候再C中以這個FLAG啓動D的 , D再啓動E,這個時候棧中情況爲A,B,C,E。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章