【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )
文章目錄
- 一、 安卓應用任務棧管理
- 二、 任務與返回堆棧回顧
- 三、 返回堆棧清除
- 四、 關于親和性回顧
- 五、 Activity 啟動模式 LaunchMode 補充 ( standard | singleTop )
一、 安卓應用任務棧管理
1 . 官網 activity 配置文檔 : AndroidMainifest.xml 中 Activity 標簽設置參考 , 詳細地列出了 <activity /> 標簽可以設置的 393939 個屬性 , 有些不常用 , 與任務棧管理相關的有 666 個常用標簽 ;
2 . 任務棧管理常用方法 : 在應用開發過程中 , 使用下面的 666 個標簽屬性 , 333 個 Intent 標志常量 , 即可應對大多數的開發任務 , 如果遇到比較刁鉆的需求 , 再去詳細閱讀文檔 , 查找解決方案 ;
① <activity /> 的 666 個常用標簽屬性 :
- taskAffinity : 親和性 ;
- launchMode : 啟動模式 ;
- allowTaskReparenting
- clearTaskOnLaunch
- alwaysRetainTaskState
- finishOnTaskLaunch
② 333 個常用的 Intent 常量 :
- FLAG_ACTIVITY_NEW_TASK
- FLAG_ACTIVITY_CLEAR_TOP
- FLAG_ACTIVITY_SINGLE_TOP
二、 任務與返回堆棧回顧
在博客 【Android 應用開發】Android 返回堆棧 與 任務 中對 Android 中的任務與返回堆棧進行了簡要說明 ;
任務就是 Activity 實例集合 , 返回堆棧就是存儲這些 Activity 實例的數據結構 , 這兩個概念可以一定程度上等同理解 , 一個任務對應一個返回堆棧 ;
三、 返回堆棧清除
【Android 應用開發】Activity 返回堆棧清除操作 ( 默認狀態 | 清除返回堆棧配置 | 不清除返回堆棧配置 | 清除指定界面配置 ) 博客中講解了清除返回堆棧的一系列設置 ;
任務棧清除控制 : 在任務棧轉為后臺后 , 在轉回前臺 , 任務棧的行為設置 ;
① 默認狀態任務棧操作 : 默認狀態下 , 后臺的任務的返回堆棧過 30 分鐘就會被清空只剩下根元素 ;
② 不去清空任務棧 : 設置 android:alwaysRetainTaskState 為 true , 則后臺任務棧不會被清空 ;
③ 立即清空任務棧 : 設置 android:clearTaskOnLaunch 為 true , 只要應用進入后臺 , 就會馬上清空任務棧 ;
④ 界面返回清空 : 設置 Activity 的 android:finishOnTaskLaunch 為 true , 任務棧中如果有該 Activity 實例 , 就會清空
四、 關于親和性回顧
【Android 應用開發】Activity 任務親和性 taskAffinity 設置 ( taskAffinity 屬性 ) 簡單介紹了親和性相關知識 ;
親和性僅在兩個應用場景生效 :
① 更改 Activity 所在的父任務 : 即設置 android:allowTaskReparenting 效果 ;
② 啟動新任務 : 啟動 Activity 界面時 , Intent 中設置了 FLAG_ACTIVITY_NEW_TASK 標志位 ;
五、 Activity 啟動模式 LaunchMode 補充 ( standard | singleTop )
之前的博客 【Android 應用開發】Android 返回堆棧管理 ( 默認啟動模式 | 棧頂復用啟動模式 | 棧內復用啟動模式 | 單實例啟動模式 | CLEAR_TOP 標識 ) 中描述了 Activity 的四種啟動模式 ;
分析 Activity 啟動模式時 , 從 Activity 創建行為 , 和 返回堆棧 ( 前臺 , 后臺 ) 兩個角度分析 444 種啟動模式 ;
standard, singleTop , singleTask , singleInstance , 444 種啟動模式 ;
僅討論沒有外部標志位干擾的情況 , 純啟動模式設置對應的 Activity 實例顯示方式 ;
1 . 模式分組 :
① 常用啟動模式 : 其中 standard , singleTop 是經常使用的 , 功能類似 ;
- Activity 實例位置 : 上述兩種啟動模式的 Activity 可以放在任何堆棧的任何位置 ;
- Activity 實例個數 : 上述兩種啟動模式的 Activity 在單個返回堆棧中可以存在多個 , 可以同時存在與多個返回堆棧 ;
② 特殊啟動模式 : singleTask , singleInstance 一般情況下不使用 , 只有開發特殊 APP 時才用到這兩個啟動模式 ;
- Activity 實例位置 : 上述兩種啟動模式的 Activity 只能處于返回堆棧根元素位置 , 只能在堆棧最下面 ;
- Activity 實例個數 : 上述兩種啟動模式的 Activity 在應用中只能存在一個 ;
2 . standard 啟動模式 :
① 關于任務棧操作 :
- 不涉及任務棧操作 ( 一般情況 ) : 該啟動模式不涉及任何任務棧操作 , 僅在當前任務棧中進行 Activity 實例的添加 ;
- 特殊情況 : Intent 對象中設置了 FLAG_ACTIVITY_NEW_TASK 指令 , 就 涉及到任務棧的操作 ;
② 啟動 Activity 方式 : 每創建一個 Activity 實例 , 都要將其放入當前的任務返回堆棧棧頂中 ;
③ Activity 實例與返回堆棧對應 : 因此在 多個返回堆棧中 , 可能存在多個 Activity 實例 , 每個返回堆棧中可能存在多個 Activity 實例 ;
3 . singleTop 啟動模式 : 與 standard 啟動模式基本相同 , 只有一點不同 , 就是啟動 Activity 時 , 當前棧頂的 Activity 實例是否是要啟動的 Activity 實例類型 , 分兩種情況進行討論 ;
① 返回堆棧棧頂不是要啟動的 Activity : 如果要啟動的 singleTop 啟動模式的 Activity 實例 , 并不是當前棧頂的 Activity 實例 , 那么后續操作與 standard 模式相同 ;
② 返回堆棧棧頂就是要啟動的 Activity : 如果當前棧頂的 Activity 就是要啟動的 Activity 類型實例 , 那么會采用如下邏輯進行處理 ;
- 棧頂復用 : 調用返回堆棧棧頂的 Activity 實例的 onNewIntent 方法 , 接收新的 Intent , 復用該 Activity 實例 ;
- 注意 : 只有在棧頂才復用 , 如果 Activity 實例在返回堆棧的中間部位或底部 , 不能復用 , 直接創建新的 singleTop 啟動模式 Activity 實例 , 放入返回堆棧 ;
單個返回堆棧中可以存在多個 standard 和 singleTop 啟動模式的 Activity 實例 ;
總結
以上是生活随笔為你收集整理的【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 性能优化】应用启动优化
- 下一篇: 【Android 应用开发】Activi