• <menu id="gag6m"></menu>
    <object id="gag6m"></object>
    <input id="gag6m"></input>
    <object id="gag6m"></object>
  • <menu id="gag6m"><u id="gag6m"></u></menu><input id="gag6m"><acronym id="gag6m"></acronym></input>
    <input id="gag6m"><u id="gag6m"></u></input>
  • <menu id="gag6m"></menu>
    <menu id="gag6m"><u id="gag6m"></u></menu>
  • <input id="gag6m"><u id="gag6m"></u></input>
    <input id="gag6m"><u id="gag6m"></u></input>
  • <input id="gag6m"></input>
  • <object id="gag6m"></object>
  • <input id="gag6m"><u id="gag6m"></u></input><input id="gag6m"></input><input id="gag6m"><acronym id="gag6m"></acronym></input>
  • <input id="gag6m"><u id="gag6m"></u></input><input id="gag6m"></input>
  • <object id="gag6m"><acronym id="gag6m"></acronym></object>
    <input id="gag6m"><acronym id="gag6m"></acronym></input>
  • 頭條 科技 產經 家電 智能 手機 芯片 數碼 電商 網站地圖
    中國IT產經新聞網-移動互聯網與智能搜索領域是未來IT產業發展的趨勢!
    中國IT產經新聞網/大數據時代/正文
    為要啟動的Activity分配任務棧flag_activity_new_task
    來源:
    2021-11-12
    編輯:小編

         FLAG_ACTIVITY_NEW_TASK意義:一般來說當我們從launcher中啟動一個應用進入到ActivityA中,系統會為這個應用生成一個新任務堆棧并置于前臺,ActivityA被放入棧底,之后從ActivityA啟動另一個ActivityB,如果不設置什么附加屬性,ActivityB默認也放到和ActivityA這個堆棧中,這樣當你按返回時,B出棧,A呈現出來了,這個應該很好理解。那現在假如ActivityA啟動一個Service或者發一個廣播,這都是后臺的活,和我們的任務棧沒有關系,現在假如我們在廣播中需要啟動一個Activity,當然需要為這個Activity指定或分配一個任務棧,FLAG_ACTIVITY_NEW_TASK的意義就是這個。


          FLAG_ACTIVITY_NEW_TASK: 設置此狀態,記住以下原則,首先會查找是否存在和被啟動的Activity具有相同的親和性的任務棧(即taskAffinity,注意同一個應用程序中的activity的親和性一樣,所以下面的a情況會在同一個棧中,前面這句話有點拗口,請多讀幾遍),如果有,直接把這個棧整體移動到前臺,并保持棧中的狀態不變,即棧中的activity順序不變,如果沒有,則新建一個棧來存放被啟動的activity。
          a. 前提: Activity A和Activity B在同一個應用中. 操作: Activity A啟動開僻Task堆棧(堆棧狀態: A), 在Activity A中啟動Activity B, 啟動Activity B的Intent的Flag設為FLAG_ACTIVITY_NEW_TASK, Activity B被壓入Activity A所在堆棧(堆棧狀態: AB).
        原因: 默認情況下同一個應用中的所有Activity擁有相同的關系(taskAffinity).
          b. 前提: Activity A在名稱為"TaskOne應用"的應用中, Activity C和Activity D在名稱為"TaskTwo應用"的應用中.
    操作1: 在Launcher中單擊"TaskOne應用"圖標, Activity A啟動開僻Task堆棧, 命名為TaskA(TaskA堆棧狀態: A),在Activity A中啟動Activity C, 啟動Activity C的Intent的Flag設為FLAG_ACTIVITY_NEW_TASK,Android系統會為Activity C開僻一個新的Task, 命名為TaskB(TaskB堆棧狀態: C), 長按Home鍵, 選擇TaskA,Activity A回到前臺, 再次啟動Activity C(兩種情況1.從桌面啟動;2.從Activity A啟動,兩種情況一樣), 這時TaskB回到前臺, Activity C顯示, 供用戶使用, 即:包含FLAG_ACTIVITY_NEW_TASK的Intent啟動Activity的Task正在運行, 則不會為該Activity創建新的Task,而是將原有的Task返回到前臺顯示.
          操作2: 在Launcher中單擊"TaskOne應用"圖標, Activity A啟動開僻Task堆棧, 命名為TaskA(TaskA堆棧狀態: A),在Activity A中啟動Activity C,啟動Activity C的Intent的Flag設為FLAG_ACTIVITY_NEW_TASK,Android系統會為Activity C開僻一個新的Task, 命名為TaskB(TaskB堆棧狀態: C),  在Activity C中啟動Activity D(TaskB的狀態: CD) 長按Home鍵, 選擇TaskA, Activity A回到前臺, 再次啟動Activity C(從桌面或者ActivityA啟動,也是一樣的),這時TaskB回到前臺, Activity D顯示,供用戶使用.說明了在此種情況下設置FLAG_ACTIVITY_NEW_TASK后,會先查找是不是有Activity C存在的棧,根據親和性(taskAffinity),如果有,剛直接把這個棧整體移動到前臺,并保持棧中的狀態不變,即棧中的順序不變。

    0
    評論總數:0 [ 查看全部 ]網友評論
        
        驗證碼:    
    中國IT產經新聞網-移動互聯網與智能搜索領域是未來IT產業發展的趨勢!
    中國IT產經新聞網-移動互聯網與智能搜索領域是未來IT產業發展的趨勢!
    產業點評更多
    廠商動態更多
    熱門綜合更多
    中國IT產經新聞網-移動互聯網與智能搜索領域是未來IT產業發展的趨勢!
    CopyRight @ 2008-2020 中國IT產經新聞網 All Right Reserved 違者必究 京備05618372
    全国空降