> 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.md).

# 目录

重学安卓专栏目录一览

## **视图控制器**

![](https://images.xiaozhuanlan.com/photo/2021/d99e424ccc7f2630c936f42a37fc4ec0.png)

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

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

###

![](https://images.xiaozhuanlan.com/photo/2021/6d7dfc87cd4d44a0f9f18f8e69f52888.png)

### [**《重学安卓：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 也会被 “回收” ？唯一特例及解析

###

![](https://images.xiaozhuanlan.com/photo/2021/a852f2cf724839883e378e85639dd39a.png)

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

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

###

![](https://images.xiaozhuanlan.com/photo/2021/1cd911633b0b9fb46e0db439394c6213.png)

### [**《重学安卓：你丢了 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？

###

![](https://images.xiaozhuanlan.com/photo/2021/9374a0925948a0311fd915f3b13d2345.png)

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

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

###

![](https://images.xiaozhuanlan.com/photo/2021/6a7eb3793bb1c2c65bdd347136135281.png)

### [**《重学安卓：我的碎片很听话，你的 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 回退后的状态恢复
* 后记

## **标准化开发模式**

![](https://images.xiaozhuanlan.com/photo/2021/7e0204bd8ca7a2a59d918f33c400ca74.png)

### [**《重学安卓：为你还原一个真实的 Jetpack Lifecycle》**](https://xiaozhuanlan.com/topic/3684721950)

* 前言
* 被提前提上日程的 Jetpack
* Lifecycle 的目标只有三个
* Lifecycle 问世前的混沌世界
* Lifecycle 为什么能解决这三个问题？
* 那 Lifecycle 具体是依赖什么机制运作的呢？
* 引入 Lifecycle 后的世界
* 综上
* 附注
* **Note 2020.2.27 加餐：**
  * 造成人们误认为 “页面 onPause 时不会收到 LiveData 通知” 的原因
* **Note 2021.2.21 加餐：**
  * 对 “一致性” 及 “一致性问题” 本质的解析

###

![](https://images.xiaozhuanlan.com/photo/2021/9278a13955c2ecc52b8cb783bb3ce5f3.png)

### [**《重学安卓：LiveData 鲜为人知的 身世背景 和 独特使命》**](https://xiaozhuanlan.com/topic/0168753249)

* 前言
* 被人云亦云者埋汰的 LiveData
* LiveData 的目标只有三个
* LiveData 问世前的混沌世界
* LiveData 为什么能解决这三个问题？
* **Note 2020.11.11 加餐：**
  * 举一个关于 “唯一可信源” 通俗易懂的生活案例
* **Note 2020.2.17 加餐：**
  * Fragment owner 最新设计的变更及缘由
* **Note 2020.10.14 加餐：**
  * 对 “唯一可信源” 概念本质的补充说明
* **Note 2020.4.11 加餐：**
  * 注意不要重复注册 LiveData
* **Note 2021.8.16 加餐：**
  * 关于 “观察者模式” 和 “发布订阅模式” 的区别
* **Note 2021.01.12 加餐：**
  * 匿名内部类有个 “重复订阅” 的坑需要注意
* **Note 2021.04.12 加餐：**
  * 对 “Note 2021.01.12 加餐” 的进一步说明
* 综上
* **Note 2020.7.15 加餐：**
  * LiveData 数据倒灌 背景缘由全貌 独家解析
* **Note 2020.09.14 加餐：**
  * 对 “LiveData 不宜用在 Repository” 的解读
* **Note 2020.11.08 加餐：**
  * 对 EventBus 适用场景的解析

###

![](https://images.xiaozhuanlan.com/photo/2021/9668b2c382e77ebdd987feff28398ad0.png)

### [**《重学安卓：在页面开发中 左右逢源的 Jetpack ViewModel》**](https://xiaozhuanlan.com/topic/6257931840)

* 前言
* 被严重低估的 Jetpack ViewModel
* ViewModel 的目标只有三个
* ViewModel 问世前的混沌世界
* ViewModel 为何能解决这三个问题？
  * **Note 2020.8.9 加餐：**
  * 对作用域机制本质描述的简化重制
* 引入 ViewModel 后的世界
* **Note 2021.07.18 加餐：**
  * ViewModel 的好处之一是解决了 “**状态管理的一致性问题**”
* **Note 2020.10.28 加餐：**
  * 解析 ViewModel 在实际开发中 “两大高频场景” 下的使用
* 需要明确的 3 个小细节
  * **Note 2020.2.10 加餐：**
  * 对 SavedStated 被单独抽取维护的缘由的解析
* **Note 2021.2.4 加餐：**
  * 对 ViewModel 潜在的内存泄漏的解析
* **Note 2021.07.20 加餐：**
  * ViewModel 业务能力外的场景及应对方案
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/00c374ab9811c47ebcf8ac76f08374bc.png)

### [**《重学安卓：从被误解到 “真香” 的 Jetpack DataBinding》**](https://xiaozhuanlan.com/topic/9816742350)

* 前言
* 被不假思索地抵制的 DataBinding
* DataBinding 的目标只有三个
* DataBinding 问世前的混沌世界
* DataBinding 为什么能解决这三个问题？
* **造成人们误认为 DataBinding 是在 xml 中写 UI 逻辑的原因**
* DataBinding 结合 LiveData 的使用
* **Note 2019.12.12 加餐：**
  * LiveData 和 ObservableField 的本质区别
* **Note 2020.10.21 加餐：**
  * 对 BindingAdapter 存在缘由的解析
* BindingAdapter 在解决 Drawable 复用问题上的绝妙使用
* **Note 2020.4.26 加餐：**
  * DataBinding 参数语法为何如此设计
* **Note 2020.5.6 加餐：**
  * BindingMethod 与 BindingAdapter 的本质区别
* **Note 2020.12.11 加餐：**
  * ViewBinding 的本质、与 DataBinding 的区别，以及适用场景
* DataBinding 的注意事项 和 屡试不爽的排错技巧
  * **Note 2020.8.3 加餐：**
  * 注意自定义视图包名的书写规范
* **Note 2020.7.27 加餐：**
  * 现有条件下解决 视图调用一致性问题 的最优解
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/c62669a2543de11d20205d2d46448b19.png)

### [**《重学安卓：柳暗花明 Jetpack Navigation 打开方式与缺陷分析》**](https://xiaozhuanlan.com/topic/5860149732)

* 前言
* Navigation 的目标主要有 3 个
* Navigation 问世前的混沌世界
* Navigation 为什么能解决这三个问题？
* 那 Navigation 具体是依赖什么机制运作的呢？
  * 1.定义声明式编程协议
  * 2.抽象和封装控制器代码
  * 3.对作用域的补充说明
* 引入 Navigation 后的世界
* 综上
* 作为压轴分享的痛点解决方案
* **Note 2019.8.7 加餐：**
  * 作为额外附赠的使用说明
* **Note 2019.11.4 加餐：**
  * 对官方使用 replace 的缘由的理解 和 专属解决方案
* **Note 2020.3.31 加餐：**
  * 不建议通过复用 View 的方式优化 onCreateView 的缘由
* **Note 2020.07.16 加餐：**
  * GitHub 上的 Navigation Add Hide 修改版的致命通病 和 独家解决方案
* **Note 2021.07.10 加餐：**
  * Navigation 有什么难以替代的好处？

###

![](https://images.xiaozhuanlan.com/photo/2021/5c633f8b521e3cba2187e2103c1f6539.png)

### [**《重学安卓：是让人耳目一新的 Jetpack MVVM 精讲》**](https://xiaozhuanlan.com/topic/0129483567)

* 前言
* 面向标准化开发已成现实
* 本文的目标
* Jetpack Lifecycle
  * Lifecycle 存在前的混沌世界
  * Lifecycle 为什么能解决上述这些问题？
* Jetpack LiveData
  * LiveData 存在前的混沌世界
  * LiveData 为什么能解决上述这些问题？
  * **LiveData 有个坑需要注意**
  * **Note 2020.07.09 加餐**
* Jetpack ViewModel
  * ViewModel 存在前的混沌世界
  * ViewModel 为什么能做到这几点？
* Jetpack DataBinding
  * DataBinding 存在前的混沌世界
  * DataBinding 就是来解决这些问题
* 综上

## **视图系统**

![](https://images.xiaozhuanlan.com/photo/2021/d495f294b9a45fb832e8bce476262b71.png)

### [**《重学安卓：从 0 到 1 “自定义视图” 完整爬坑顺序》**](https://xiaozhuanlan.com/topic/9361075842)

* 前言
* 死记硬背时期 的混沌世界
* 深度思考眼中 的自定义视图
  * 对现存自定义视图的学习
  * 对视图标准化 API 的学习
* 综上
* **Note 2020.07.07 加餐：**
  * 重学安卓 开源库 内部共享计划
* **Note 2021.08.15 加餐：**
  * 从 0 到 1 “自定义视图” 完整爬坑顺序

###

![](https://images.xiaozhuanlan.com/photo/2021/39223a3982d4c28f1cfd443166ee0193.png)

### [**《重学安卓：滑动冲突 的快乐你不懂！》**](https://xiaozhuanlan.com/topic/8796215034)

* 前言
* 授人以鱼，不如授人以渔
* 作为 年复一年 的滑动冲突
* 为什么存在 滑动 的设计？
* **为什么 首页和详情 要如此设计？**
* 所以 为什么存在 滑动冲突？
* 那么 如何解决 这些问题？
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/37a91b5f28918a1db97f79da529d86c8.png)

### [**《重学安卓：不如我们 从零开始设计一套 视图系统》**](https://xiaozhuanlan.com/topic/0162375948)

* 前言
* 作为 13 年前才面市的新型用户体验
  * First of all
  * Secondly
  * And then
  * However
* So
  * **视图系统的坐标系 为何如此设计？**
  * 视图坐标 为何如此设计？
  * 为什么能做到 惯性滑动？
  * **惯性滑动的测量值 为何如此设计？**
  * 为什么能做到 位移？
  * **事件分发 为何要如此设计？**
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/e2d408cc372baf032d753ad1826cfaa4.png)

### [**《重学安卓：百闻不如一见的 视图系统 架构全貌》**](https://xiaozhuanlan.com/topic/6420935178)

* 前言
* **为什么要反思 视图系统**
* 作为差强人意的 Android 视图系统
* 视图系统 **为什么要基于 C/S 架构**
* 一睹 视图接口 和 视图服务 的抽象
* 当下 Android 视图系统 的怪状
* 综上
* **Note 2020.1.29 加餐：**
  * 是让人 过目难忘 的 Android GUI 关系梳理

###

![](https://images.xiaozhuanlan.com/photo/2021/f25d1b8d738a01775a7f73504b76a9ba.png)

### [**《重学安卓：过目难忘 Android GUI 关系梳理》**](https://xiaozhuanlan.com/topic/2073915486)

* 前言
* Android GUI 系统仍在困扰着 80% 的进阶者
* 是一分为二的理解方式
  * **谁才是可视化排版的根基？**
  * View 和 Drawable 不过是排版的模板
  * Layout 和 Inflater 不过是后来者
  * include，merge，ViewStub 是解药的解药
* 作为承上启下的小结
  * 上文的 "Window" 为何一直加个双引号？
  * ViewRootImpl 是怎么帮 Canvas 与窗口对应上的？
  * **是对症下药的 排版渲染 性能优化指南**
  * PhoneWindow 本质 及 事件分发的内幕
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/242fbe61c8e00f823fb2b0ebcb8b29b2.png)

### [**《重学安卓：一通百通 “声明式 UI” 扫盲干货》**](https://xiaozhuanlan.com/topic/2356748910)

* 前言
* 声明式 UI 的由来
* **声明式 UI 的本质是 “函数式编程”**
  * “纯函数” 是 “函数式编程” 的基石
  * “函数式编程” 引入前的混沌世界
  * **“函数式编程” 为什么能 “彻底” 解决这类问题？**
  * 引入 “函数式编程” 后的世界
* 所以为什么会有 “数据驱动 UI 框架”？
  * **声明式 UI 的运作流程是怎样的？**
  * **数据驱动 难以替代的好处**
* 函数式编程的局限
* **Note 2020.07.27 加餐：**
* 现有条件下解决 “视图调用一致性问题” 的最优解
  * 1.Java + DataBinding 严格模式
  * 2.Kotlin + ViewBinding
  * 3.Kotlin DSL 动态布局
* **Note 2020.07.31 加餐：**
  * 通过 “函数式编程思想” 秒懂 Compose 流程机制
* 综上

...

## **数据交互**

![](https://images.xiaozhuanlan.com/photo/2021/a163f7d3fda74401480e965c35e3c9a5.png)

### [《重学安卓：当面试官问 HTTP 时，到底是在问什么》](https://xiaozhuanlan.com/topic/7184635029)

* 前言
* 比起技术点，更多的是对思维模式的考察
* **网络及网络请求的本质是什么**
  * 网络的发展史
  * 网络体系结构的由来
  * 所以为什么要设计为分层结构
  * 网络结构中每一层的作用
  * 互联网的本质是什么
* **HTTP 的本质是什么**
  * **HTTP 问世前的混沌世界**
  * **HTTP 解决了什么问题**
* HTTP 的发展都经历了什么
  * 截至目前，HTTP 都能做什么
* 客户端开发主要需要掌握关于 HTTP 的哪些
  * 常用的场景和头部属性
* 综上
  * “谈谈你对 HTTP 的理解”

###

![](https://images.xiaozhuanlan.com/photo/2021/c1eba081a578067d522a9696368346af.png)

### [《重学安卓：豁然开朗 存储访问 适配解析》](https://xiaozhuanlan.com/topic/5240638917)

* 前言
* 被开发者一拖再拖的分区存储适配
* 存储访问及其适配 究竟什么来路
* 为什么要有存储访问
  * 这 “收” 和 “发” 的过程中究竟经历了哪些细节？
  * 为什么要大动周折安排这些过程呢？
  * **1.从 “效率和平衡” 的角度理解**
  * **2.从 “复用和隐私” 的角度理解**
* 所以为什么要适配存储访问
  * 当我们提起适配的时候，我们是在说什么
  * 是出于什么考虑强制我们适配
* **FileProvider 的存在缘由和适配**
  * FileProvider 适配前的混沌世界
  * FileProvider 是如何解决这个问题的
* **分区存储 的存在缘由和适配**
  * 分区存储 适配前的混沌世界
  * 分区存储 是如何解决这个问题的
* **Note 2020.12.21 加餐：**
  * 从 Android 10 起，MediaStore 有 2 个坑需要注意
* **Note 2020.12.27 加餐：**
  * 适用于团队开发的、记忆成本较低的 “分区存储” 统一适配参考建议
* **Note 2022.02.17 加餐：**
  * Android 11 也是可以通过 File 方式读写 Sdcard 内容
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/83c80a67fae202a0943a174415966953.png)

### [**《重学安卓：是虽冷门但有用的 背景缘由拾遗》**](https://xiaozhuanlan.com/topic/0378514692/)

* 前言
* 软件开发只是作为末端的实现
  * 注意力要花在刀刃上
  * 总有比刀刃更刀刃的刀刃
  * 饭后甜点不能当主食吃
* [Service 老矣，尚能饭否？](https://xiaozhuanlan.com/topic/0378514692/#service)
* [你 Broadcast 还是你 Broadcast](https://xiaozhuanlan.com/topic/0378514692/#broadcast)
* [出师未捷身先死的 WorkManager](https://xiaozhuanlan.com/topic/0378514692/#workmanager)
* To be continue ...

## **架构模式实战经验**

![](https://images.xiaozhuanlan.com/photo/2021/d7e54b75e7ab959fe00c63b2ff506e0d.png)

### [《重学安卓：这是一份 “架构模式” 的自驾攻略》](https://xiaozhuanlan.com/topic/8204519736)

* 前言
* 背景
* 脚手架项目的由来
* 架构图总览
* **福利 1：**&#x44;ataBinding 严格模式
* **福利 2：**&#x55;nPeek-LiveData 发送一次性事件
* **福利 3：**&#x53;mooth-Navigation 使转场顺滑
* **Note 2020.10.28 加餐**
  * 透过 State-ViewModel 托管和恢复状态
  * 透过 Event-ViewModel 跨页面通信和 “消息鉴权”
* 通过 Request 来复用转发逻辑
* **Note 2020.11.03 加餐**
  * 正确区分 “可变状态” 和 “只读数据” 的本质及作用
  * 而这也就顺带解析了 为什么有了 ViewModel 还要有 Request
* 通过 UseCase 管理可叫停的业务
* 通过 DataResult 回调数据层结果
* **Note 2020.12.01 加餐**
  * 对 DataResult v1.1 新设计的补充说明
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/60f7d7c66aab6ca7865630b0a09e50e0.png)

### [**《重学安卓：LiveData 数据倒灌 背景缘由全貌 独家解析》**](https://xiaozhuanlan.com/topic/6719328450)

* 前言
* 姗姗来迟的笼统描述
* “数据倒灌” 的由来
* 为什么会有数据倒灌
  * **Note 2020.07.17 加餐：**
  * 图文解析数据倒灌发生的场景
* **为何非要通过 ViewModel + LiveData 来处理页面通信？**
* 为什么通过全局 ViewModel 而不是 静态单例？
* 为什么不用 LiveDataBus？
* 最新的 Result API 如何？
* **Event 事件包装器、反射方式、SingleLiveEvent 分别存在什么问题？**
* **UnPeekLiveData 是如何解决这些问题的？**
* GitHub & Maven 依赖
* 综上
* **Note 2020.07.21 加餐：**
  * UnPeekLiveData 增加一层 ProtectedUnPeekLiveData 的设计缘由解析
* **Note 2020.10.15 加餐：**
  * 升级到 UnPeekLiveData v4.0 享用 “更快更稳” 的防倒灌机制
* **Note 2021.04.22 加餐：**
  * 升级到 UnPeekLiveData v5.0 获得更好的内存性能和更友好的 API 访问
* **Note 2021.06.18 加餐：**
  * 是代码复杂度更小的 UnPeekLiveData v6.0 设计
* **Note 2021.07.19 加餐：**
  * 是代码复杂度进一步减小的 UnPeekLiveData v6.1
* **Note 2021.08.10 加餐：**
  * 分享一份 v6.1 源码简化版，方便对核心 “防倒灌” 机制的理解
* **Note 2021.08.12 加餐：**
  * 是内存管理效率进一步优化的 UnPeekLiveData v7.0
* **Note 2021.08.21 加餐：**
  * 分享一份 v7.2 源码完整版，是简练完整的防倒灌设计

###

![](https://images.xiaozhuanlan.com/photo/2021/67f715d9d4de2b45a62481cdf40677bd.png)

### [《重学安卓：架构组件 “一致性” 概念 全面解析》](https://xiaozhuanlan.com/topic/9340256871)

* 前言
* 为什么要提及 “一致性问题”
* 架构组件和 “一致性问题” 的密切关系
* 到底什么是一致性、什么是一致性问题
* 关于 “解决一致性问题” 的举一反三
  * Lifecycle 是通过 *\_\_\_\_* 来实现 生命周期管理的一致性
  * LiveData 是通过 *\_\_\_\_* 来实现 消息同步的一致性
  * DataBinding 是通过 *\_\_\_\_* 来实现 视图调用的 null 安全一致性
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/541c54b938f962eaf95a1042175c2413.png)

### [**《重学安卓：提神醒脑 MVP、MVVM 关系精讲》**](https://xiaozhuanlan.com/topic/6105792348)

* 前言
* 并不是每一个提问都值得被回答
* 本质和区别，我只说一遍
* 先说结论
* 所以二者的区别是什么？
* Jetpack MVVM 和 MVVM 模式的关系
* 我为什么能瞬间感知沟通质量的 “好” 与 “坏” ？
* 综上
* **Note 2020.09.10 加餐：**
  * Jetpack MVVM 或借鉴了 MVI 开发模式
* **Note 2020.12.31 加餐：**
  * “依赖倒置” 的适用场景 及 源码设计分享

###

![](https://images.xiaozhuanlan.com/photo/2021/35ff33ee2516d679fd7d948b821dcf2a.png)

### [《重学安卓：唯一可信源 读写分离设计 独家解析》](https://xiaozhuanlan.com/topic/2049857631)

* 前言
* 绝对自由和自由的代价
* 边界意识和监管下的真自由
* LiveData 的本质和精髓
* 所以 LiveDataBus 的问题在于
* 用工程化的语言再捋一捋
* 关于 “唯一可信源” 的定义
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/e0754be5d119e8a5fa0b4110fedce088.png)

### [《重学安卓：吃透 LiveData 本质，享用可靠的消息鉴权机制》](https://xiaozhuanlan.com/topic/6017825943)

* 前言
* **第一层**：LiveData 是与 UI 打交道的 “最后一环”
* **第二层**：LiveData 可以推状态，也可以推事件
  * 广播：封闭式 的 发布订阅模式
* **第三层**：LiveData 支持 “唯一可信源” 的鉴权设计
  * 状态是私域的，事件是公域的
  * 公证处：开放式 的 发布订阅模式
* **第四层**：LiveData 存在 “数据倒灌” 的问题
  * 使用 UnPeek-LiveData 解决 “数据倒灌” 问题
* 综上

## **授人以鱼 不如授人以渔**

![](https://images.xiaozhuanlan.com/photo/2021/d5c8c20b2d381eac5e1f69d4e3b9a6c0.png)

### [《重学安卓：这是一份 **“**&#x7B80;洁有力” 的 认知地图》](https://xiaozhuanlan.com/topic/9074561823)

* 前言
* 软件开发是一项数字化工程
* 软件的本质是数据的交互
* 安卓不过是 Google 在地上画了个圈
* Android 的认知地图
* 重学安卓专栏目录一览

###

![](https://images.xiaozhuanlan.com/photo/2021/f02e3e840d71cdd16ee7da7a5ef0d839.png)

### [**《重学安卓 基本功：是 “随时随地可受用” 的 深度思考原则》**](https://xiaozhuanlan.com/topic/9837051426)

* 前言
* 我放弃了穿越回到过去
* 历史总是惊人地相似
* 为什么思考是唯一的出路？
* **所以该如何正确有效地思考？**
* 综上

###

![](https://images.xiaozhuanlan.com/photo/2021/e22ee8360c625157848315c38b8f95f9.png)

### [**《重学安卓 致创作者：免疫 “网络暴力和打压” 的 高频认知补丁》**](https://xiaozhuanlan.com/topic/3475690128)

* 前言
* 身陷烦恼时，从未有人给过你专业的聆听
* 本文的目标
* 免疫补丁问世前的混沌世界
* 为什么免疫补丁能踩到点上
  * 认知一：人是基于认知来行动的生物
  * 认知二：没有过去和未来，只有当下
  * 认知三：最高频的现象是自利
* 所以网络暴力和 PUA 究竟做了什么?
* 所以该如何有效应对 网络暴力和 PUA？
* 综上
* **Note 2020.7.11 加餐：**
  * 透过 “原则底线” 回绝来者的越界侵犯
* **Note 2020.9.2 加餐：**
  * V4：从人格发展的角度 来理解网暴现象的成因
* **Note 2020.9.24 加餐：**
  * V6：从基因演化的角度出发，理解网暴现象的成因
* **Note 2020.10.11 加餐：**
  * V8：从个体思维和社会发展的角度 来理解网暴现象的成因
* **Note 2020.11.01 加餐：**
  * V10：综合 “社会发展、人类演化、思维方式” 等角度 来理解网暴现象的成因
* **Note 2021.08.23 加餐：**
  * V20：让我们看得更通透一些
  * 设定如此，所以高频且普遍
  * 转嫁羞愧，拉人垫底
  * 从 “心理” 角度出发重新捋一遍
  * 从 “生理” 角度出发重新捋一遍
  * 从 “社会” 角度出发重新捋一遍

####
