# 实战经验

### [《重学安卓：这是一份 “架构模式” 的自驾攻略》](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 新设计的补充说明
* 综上

### [**《重学安卓：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://xiaozhuanlan.com/topic/9340256871)

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

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

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

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

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

### [《重学安卓：关于 LiveData 本质，你看到了第几层》](https://xiaozhuanlan.com/topic/6017825943)

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kunminx.gitbook.io/relearn-android/category/shi-zhan-jing-yan.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
