> For the complete documentation index, see [llms.txt](https://kunminx.gitbook.io/relearn-android/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kunminx.gitbook.io/relearn-android/category/shi-tu-kong-zhi.md).

# 视图控制器

View-Controller 之 生命周期、重建机制、状态管理、页面通信、路由导航

### [**《重学安卓：Activity 的快乐你不懂！》**](https://xiaozhuanlan.com/topic/4568971203)

* 前言
* 我是一块板砖
* 我是 Surface Flinger
* 我是 Window
* 我是一个会套娃的 View
* …… 所以，Window 成了摸鱼般的存在吗？
* 于是我改名叫 Activity
* 综上
* **Note 2019.11.9 加餐：**
  * 从设计模式角度 解析 Activity 和 Window 的关系
* **Note 2020.1.29 加餐：**
  * 从视图系统架构设计的角度 解析 PhoneWindow 和 ViewRootImpl 二者的本质和区别

### [**《重学安卓：Activity 生命周期的 3 个辟谣》**](https://xiaozhuanlan.com/topic/0213584967)

* 前言
* 不得不先讲的进程模式
* 前景模式、可见模式，二者的区别？
* Activity 的正常生命周期
* 生命周期节点与进程模式的对应关系？
* **为何存在生命周期的设计？**
* 节点的特点、区别，及注意事项？
* **Note 2020.9.26 加餐：**
  * 分享一个用于代替 “在 onPause 和 onStop 中做耗时操作” 的好招
* 辟谣时间到 \~
* 综上
* **Note 2020.11.4 加餐：**
  * 面试时切忌使用 “Activity 被系统回收” 等说辞
* **Note 2021.07.13 加餐：**
  * 可见模式，不如我们称其为 “失焦模式”
* **Note 2022.02.10 加餐：**
  * 前台 App 的 Activity 也会被 “回收” ？唯一特例及解析

### [**《重学安卓：绝不丢失状态的 Activity 重建机制》**](https://xiaozhuanlan.com/topic/7692814530)

* 前言
* 因为心里没底，而不敢用的状态恢复
* 什么是重建？引发重建的场景有哪些？
* 为何要设计出重建的机制？有何好处？
* **状态保存和恢复的具体过程？**（99% 的网文遗漏的关键细节）
* 状态保存和恢复的的注意事项？
* **Note 2020.3.15 加餐：**
  * onSaveInstanceState 的执行时机在新 API 中已确定
* 如何避免 “配置发生变化” 导致的重建？
* 综上
* **Note 2021.5.13 加餐：**
  * 更简便 且不易出错的 “状态保存恢复” 方式
  * App 切到后台，页面临时数据 “防丢” 的妙招

### [**《重学安卓：你丢了 offer，只因拎不清 Activity 任务和返回栈》**](https://xiaozhuanlan.com/topic/7812045693)

* 前言
  * 提出了正确的问题，事情就解决了一半
  * Activity 任务、返回栈、启动模式的 7 个扪心自问
* 任务和返回栈
  * 任务和返回栈 的概念分别为何？
  * **为何分别存在任务和返回栈？**
* 启动模式
  * **为何存在 启动模式 的设计？**
  * 4 种启动模式，表面上的特点分别为何？
  * 为何存在 多种启动模式 的设计？
  * 如何设置启动模式？
  * SingleTask **如何指定与哪个任务关联？**
    * **Note 2021.4.30 加餐：**
    * DeepLink 和 allowTaskReparenting 实验的复现方式 和 注意事项
* 任务清空或保留 Activity 的几种方式？
* **Note 2020.11.18 加餐**：
  * 对启动模式和 FLAG 区别的补充说明
* 综合案例

  **（证实了 返回栈 相对于 任务 的独立存在，全程动图和截图为证）**

  * **Note 2020.6.17 加餐：**
  * 综合实验简化重制版
* 福利时间到！魔鬼就在细节中 —— 全网独家的、严密测试的 5 个结论：
  * taskAffinity 真实的适用范围
  * standard 和 singleTop 的真实本质
  * singleTop 的真实本质
  * singleTask 的真实本质及实验佐证
  * singleTask 和 singleInstance 与最近访问列表的关系
* **Note 2020.5.17 加餐：**
  * 一个 app 能有多少个 ActivityStack
  * **Note 2020.07.27 加餐：**
  * 如何在打印信息中正确区分 TaskRecord 和 ActivityStack
  * **Note 2020.08.10 加餐：**
  * 通过 Android 9.0 的新 ADB 命令获取简洁的 Activity 堆栈信息
  * 最近访问列表中展示的卡片到底是什么
* **Note 2020.5.28 加餐：**
  * 对 5.17 疑问的实验检验结果
* **Note 2020.6.29 加餐：**
  * SingleTask 和 SingleInstance 不新建 Task 的特殊情况
  * 为什么 SingleInstance Activity 回退直接回到桌面
* **Note 2021.6.30 加餐：**
  * 系统为何不设计为直接通过 ActivityStack 来管理 ActivityRecord？

### [**《重学安卓：Intent 好比你的择偶标准》**](https://xiaozhuanlan.com/topic/2869301475)

* 前言
* 不得不先讲的 Intent 匹配机制
* 关于 Intent 的 7 个深度思考
  * 为何存在路由的设计？
  * 为何存在三大组件的设计？
  * 为何要让 Binder 来当媒婆？
  * Intent 存在哪几种类型？为何存在这样的区别？
  * 隐式 Intent 的匹配依据？
  * IntentFilter 的概念和作用为何？
  * 基于 Intent 和 IntentFilter 的匹配规则，提炼出的 4 个要点
* 关于 Intent 的 3 个实用方法
* Intent 使用的 7 个注意事项？
* 综上

### [**《重学安卓：我的碎片很听话，你的 Fragment 有自己的想法》**](https://xiaozhuanlan.com/topic/0937256481)

* Fragment 的缘起和职责为何？
* **Fragment 回退栈和 Activity 的区别？为何存在这样的区别？**
* Fragment 通信与 Activity 的区别？为何存在这样的区别？
* **Fragment 生命周期为何如此设计？**
* Fragment 生命周期和 Activity 的关系？
* Fragment 的重建和状态管理与 Activity 的区别？
* 为何会导致 Fragment 重叠？
* 为何推荐使用 DialogFragment？
* 为何视图控制器建议用 Fragment 而不是 Activity？
* 综上
* **Note 2020.3.31 加餐：**
  * Fragment 最新 API 支持 replace 回退后的状态恢复
* 后记
