回覆列表
  • 1 # rltnd3391

    Activity intent經常使用的 FLAG Intent.FLAG_ACTIVITY_NEW_TASK 預設的跳轉型別,會重新建立一個新的Activity,不過與這種情況,比方說Task1中有A,B,C三個Activity,此時在C中啟動D的話,如果在Manifest.xml檔案中給D添加了Affinity的值和Task中的不一樣的話,則會在新標記的Affinity所存在的Task中壓入這個Activity。如果是預設的或者指定的Affinity和Task一樣的話,就和標準模式一樣了啟動一個新的Activity. FLAG_ACTIVITY_SINGLE_TOP 這個FLAG就相當於載入模式中的singletop,比如說原來棧中情況是A,B,C,D在D中啟動D,棧中的情況還是A,B,C,D FLAG_ACTIVITY_CLEAR_TOP 這個FLAG就相當於載入模式中的SingleTask,這種FLAG啟動的Activity會把要啟動的Activity之上的Activity全部彈出棧空間。類如:原來棧中的情況是A,B,C,D這個時候從D中跳轉到B,這個時候棧中的情況就是A,B了 FLAG_ACTIVITY_BROUGHT_TO_FRONT 這個網上很多人是這樣寫的。如果activity在task存在,拿到最頂端,不會啟動新的Activity。這個有可能會誤導大家! 他這個FLAG其實是這個意思! 比方說我現在有A,在A中啟動B,此時在A中Intent中加上這個標記。此時B就是以 FLAG_ACTIVITY_BROUGHT_TO_FRONT 這個啟動的,此時在B中再啟動C,D(正常啟動C,D),如果這個時候在D中再啟動B,這個時候最後的棧的情況是 A,C,D,B. 特別注意的是,我上面說的網上人描述的這個FLAG,會很容易讓人誤解成這樣,A,B,C,D都是標準載入,然後我在D中啟動A,這個intent加上FLAG_ACTIVITY_BROUGHT_TO_FRONT ,就會誤認為變成B,C,D,A!!其實不是,這個時候應該是A,B,C,D,A.不信的人大家試試看。不過下面這個標記和這個標記就會讓大家明白了! FLAG_ACTIVITY_REORDER_TO_FRONT 就按在 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 最後說的,如果在A,B,C,D正常啟動的話,不管B有沒有用FLAG_ACTIVITY_BROUGHT_TO_FRONT啟動,此時在D中啟動B的話,還是會變成A,C,D,B的。FLAG_ACTIVITY_NO_HISTORY用這個標記顧名思義! 意思就是說用這個FLAG啟動的Activity,一旦推出,他就不會存在於棧中,比方說!原來是A,B,C 這個時候再C中以這個FLAG啟動D的 , D再啟動E,這個時候棧中情況為A,B,C,E。

  • 中秋節和大豐收的關聯?
  • 50 短跑運動員怎麼練自己的爆發力?