日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 应用开发】Activity 返回堆栈管理 ( 栈内复用模式 singleTask | 单实例模式 singleInstance )

發(fā)布時間:2025/6/17 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 应用开发】Activity 返回堆栈管理 ( 栈内复用模式 singleTask | 单实例模式 singleInstance ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、 singleTask ( 棧內(nèi)復用模式 ) Activity 實例在返回堆棧中的位置
  • 二、 singleTask ( 棧內(nèi)復用模式 ) Activity 啟動的五種情況
  • 三、 singleTask 棧內(nèi)復用模式 任務棧處理 ( 前臺任務棧 | 后臺任務棧 )
  • 四、 singleTask 模式 存在 Activity 實例的任務棧處理
  • 五、 FLAG_ACTIVITY_BROUGHT_TO_FRONT 常量解析
  • 六、 singleTask 棧內(nèi)復用模式回退鍵行為
  • 七、 singleTask 棧內(nèi)復用模式 啟動總結(jié)
  • 八、 singleInstance 單實例模式





一、 singleTask ( 棧內(nèi)復用模式 ) Activity 實例在返回堆棧中的位置



singleTask 啟動模式的 Activity 只能在任務返回堆棧的最底部 , 即棧底 , 根 Activity 位置 , 其在返回堆棧中 , 該 Activity 實例下面不可能也不能存在任何 Activity 實例 ;


singleTask 啟動模式的 Activity 存在的任務返回堆棧中 , 在根 Activity 上面 , 可以有其它的 Activity 實例 , 該任務返回堆棧可以有多個實例 , 但棧底必須是該 singleTask 啟動模式的 Activity 實例 ;





二、 singleTask ( 棧內(nèi)復用模式 ) Activity 啟動的五種情況



啟動 singleTask ( 棧內(nèi)復用模式 ) 的 Activity 界面時 , 首先要處理任務棧 ( 333 種情況 ) , 然后處理任務棧中的實例 ( 222 種情況 ) , 共有五種處理狀況 ;

  • 設備當前所有任務棧中沒有 Activity 實例 : 直接創(chuàng)建新的任務 , 創(chuàng)建新的 Activity 實例放入該任務返回堆棧中 ;
  • 前臺任務棧有該 Activity 實例 , 并且在棧頂
  • 前臺任務棧有該 Activity 實例 , 并且不在棧頂
  • 后臺任務棧有該 Activity 實例 , 并且在棧頂
  • 后臺任務棧有該 Activity 實例 , 并且不在棧頂




三、 singleTask 棧內(nèi)復用模式 任務棧處理 ( 前臺任務棧 | 后臺任務棧 )



singleTask 棧內(nèi)復用模式 任務棧 處理 : 這里要分兩種情況處理 , 該 Activity 實例在某個任務棧中存在 , 和 不存在該 Activity 實例的情況 ;


① 已存在 Activity 實例 : 當啟動一個 Activity 界面時 , 如果發(fā)現(xiàn)該 Activity 已經(jīng)在一個任務棧中運行 , 此時不會啟動一個新的 Activity 實例 , 而是將該任務棧恢復到前臺 ;

② 不存在 Activity 實例 : 創(chuàng)建新的 Activity 實例 , 放入新的任務棧中 ;





四、 singleTask 模式 存在 Activity 實例的任務棧處理



對于已經(jīng)存在的 Activity 實例任務棧中的操作 :


① Activity 實例不在任務棧棧頂 ( 返回堆棧有多個 Activity ) : 如果 Activity 實例不在棧頂 , 說明該 Activity 在棧底 , 并且上面還有若干 Activity 壓著 , 已經(jīng)存在的 Activity 實例會接收到一個回調(diào) , 調(diào)用 Activity.onNewIntent() 方法 , 同時設置 FLAG_ACTIVITY_BROUGHT_TO_FRONT 標志位 , 清空除棧底根 Activity 之外的其它 Activity 實例 ;


  • 新的 Intent 意圖 : 本次啟動界面將使用新的 Activity 啟動的 Intent ;

  • 設置 Intent 標志 : 并且會設置 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 常量標志位 ;



② Activity 實例就在任務棧棧頂 ( 返回堆棧僅有一個 Activity ) : 如果 Activity 實例就在返回堆棧的棧頂 , 那么只需要調(diào)用 Activity 的 onNewIntent 方法即可 , 不用設置 Activity 的啟動標志位了 ;


  • 新的 Intent 意圖 : 本次啟動界面將使用新的 Activity 啟動的 Intent ;
  • 不設置 Intent 標志 : 該情況下 不設置 Activity 啟動標志位 ;




五、 FLAG_ACTIVITY_BROUGHT_TO_FRONT 常量解析



Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 常量定義原型 :

public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT

該標志位開發(fā)者不經(jīng)常使用 , 一般情況下是在 棧頂復用模式 SingleTop由系統(tǒng)自動設置該標志位 ;

當用戶啟動一個 Activity 界面 , 如果系統(tǒng)發(fā)現(xiàn)啟動的 Activity 界面被設置了 SingleTop 棧頂復用模式 模式 , 就會自動為該 Activity 設置該標識 ;





六、 singleTask 棧內(nèi)復用模式回退鍵行為



singleTask 棧內(nèi)復用模式回退鍵行為 : 啟動 singleTask 棧內(nèi)復用模式的 Activity 界面后 , 會在一個單獨的任務的返回堆棧棧底存放該 Activity 實例 , 此時如果點擊回退鍵 , 會回退到啟動該 Activity 實例的界面 , 與正常的回退操作一致 ;





七、 singleTask 棧內(nèi)復用模式 啟動總結(jié)



啟動 singleTask 棧內(nèi)復用模式 Activity 界面總結(jié) :


① 沒有 Activity 實例 : 如果當前設備所有的任務棧中都沒有該 Activity 實例 , 那么就啟動新的 Activity 實例 , 放入一個新的任務棧中 ;


② 有該 Activity 實例的任務棧在前臺 :

  • 該 Activity 實例在棧頂 : 直接調(diào)用 onNewIntent 方法復用 ;
  • 該 Activity 實例不在棧頂 : 調(diào)用 onNewIntent 方法 , 并且設置 FLAG_ACTIVITY_BROUGHT_TO_FRONT 標志清空除該根 Activity 之外的其它 Activity 實例 ;

③ 有該 Activity 實例的任務棧在前臺 : 先將該任務激活到前臺 , 然后執(zhí)行下面操作 ;

  • 該 Activity 實例在棧頂 : 直接調(diào)用 onNewIntent 方法復用 ;
  • 該 Activity 實例不在棧頂 : 調(diào)用 onNewIntent 方法 , 并且設置 FLAG_ACTIVITY_BROUGHT_TO_FRONT 標志清空除該根 Activity 之外的其它 Activity 實例 ;




八、 singleInstance 單實例模式



singleInstance 單實例模式與 singleTask 棧內(nèi)復用模式 表現(xiàn)基本一致 , 唯一的區(qū)別是 singleInstance 模式的 Activity 所在的任務棧只能存在這個唯一的 Activity 實例 , 返回堆棧張紅不允許放入其它 Activity 實例 ;

總結(jié)

以上是生活随笔為你收集整理的【Android 应用开发】Activity 返回堆栈管理 ( 栈内复用模式 singleTask | 单实例模式 singleInstance )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。