Relearn-Android
  • 说在前头
  • 更新动态
    • 《重学安卓》两周年,回顾与展望
  • 目录
    • 视图控制器
    • 标准化开发模式
    • 视图系统
    • 数据交互
    • 实战经验
    • 底层逻辑
  • 免费试读
    • 过目难忘 Android GUI 关系梳理
    • 一通百通 “声明式 UI” 扫盲干货
  • 优惠政策 & 版权须知
由 GitBook 提供支持
在本页
  • 以 “深度思考” 为立足之本
  • 不小心当了回 “万恶之源”
  • 本质概括一览
  • 开源项目一览
  • 对未来的展望

这有帮助吗?

  1. 更新动态

《重学安卓》两周年,回顾与展望

上一页更新动态下一页目录

最后更新于3年前

这有帮助吗?

我们于 2019 年 6 月,在小专栏开设了《重学安卓》付费专栏,

迄今为止,我们共连接了 1111 名优秀开发者,并且期间不断有小伙伴告诉我,受专栏内容的影响和启发,他们也开启了写作之路。

以 “深度思考” 为立足之本

在过去两年里,我们以 “架构组件” 为话题,不遗余力地在每篇文章中贯彻落实 基于 “第一性原理” 和 “实事求是” 精神的深度思考方式,

在 “深度思考” 的帮助下,以及基于对大量样本的追踪和反思,我们独树一帜地从软件工程的视角出发抓住本质,并开源了一系列高频使用的仓库,

包括 腾讯音乐、BMW、TCL 等知名厂商的软件,都在使用我们正在维护的《UnPeek-LiveData》等仓库。

不小心当了回 “万恶之源”

不知何时起,你是否经常在 培训机构软文 或网文中看到 “一致性” 等令人迷惑的说辞?

这些术语在 Android 领域是从未有过,网上关于 “一致性问题” 等说辞,它们都有一个共同的来源,

事实上,这些术语缘于本人经由长期的深度思考、实践和交流后,为现象本质匹配的高度概括,《重学安卓》与之相对应的每一篇文章都 提供了 背景缘由、职责边界 等完整的解析过程,

但十分令人遗憾的是,本是从 “实事求是” 出发概括的术语,却频繁被人拿去 “点缀文章” 和 “挂羊头卖狗肉”,这些无厘头的滥用行为,无形中扭曲和破坏了术语 “实事求是” 的形象,

所以过去两年里,我们积极地举报 “培训机构的洗稿软文”,以及在相关文章的评论区补充参考文献来源,

非常感谢小伙伴们的主动反馈。

本质概括一览

基于深度思考,我们确立下来并广泛传播的 “本质概括” 包括但不限于:

Jetpack 架构组件本质:

Lifecycle 的本质是解决 “生命周期管理” 的一致性问题

LiveData 的本质是解决 “跨域消息同步” 的一致性问题

ViewModel 的本质是解决 “状态保存恢复” 的一致性问题

DataBinding 的本质是解决 “视图实例的 null 安全” 的一致性问题

Navigation 的本质是解决 “路由初始参数恢复” 的一致性问题

…

若要说它们有什么共性的话,就是透过各种方式 实现样板逻辑的 “内聚”,从而达到规避一致性问题的目的。

文章来源

《是让人耳目一新的 Jetpack MVVM 精讲》

《架构组件 “一致性问题” 全面解析》

·

《为你还原一个真实的 Jetpack Lifecycle》

《柳暗花明 Jetpack Navigation 打开方式与缺陷分析》

《LiveData 鲜为人知的 身世背景 和 独特使命》

《在页面开发中 左右逢源的 Jetpack ViewModel》

《从被误解到 “真香” 的 Jetpack DataBinding》

声明式 UI 本质:

声明式 UI 的本质是函数式编程,

函数式编程的基石是纯函数,

纯函数的特性是 只有一个入口、只有一个出口,且无副作用,

声明式 UI 正是通过对视图实例的屏蔽,来规避 “视图实例的 null 安全” 的一致性问题,

也即声明式 UI 可用于替代 DataBinding 等框架,

如果公司项目执意使用 Java,为了规避 null 安全问题,务必使用 DataBinding 等框架,

如果允许使用 kotlin,那么当下 kotlin + ViewBinding 的组合是更优解。

文章来源

《一通百通 “声明式 UI” 扫盲干货》

《从被误解到 “真香” 的 Jetpack DataBinding》

架构模式本质:

MVP 的本质是基于 “依赖倒置原则” 实现组件的可替换,适合非页面开发场景的编写(具体可参见我开源的 Linkage-RecyclerView 中万用的适配器),

MVVM 的本质是基于 “数据绑定” 来解决视图实例 null 安全一致性问题,也即它是专用于页面开发的模式,

当我们剔除了 DataBinding 框架而使用 Compose 或 kotlin + ViewBinding 等方式来规避一致性问题,虽然效果是等同的,但已不能称作是 MVVM。

文章来源

《如何让同事爱上架构模式、少写 bug 多注释》

《提神醒脑 MVP、MVVM 关系精讲》

LiveData 的那些事:

LiveData 的设计存在缺陷。

一方面它提供了面向 “事件” 的设计,

这使得我们萌生了通过 “决策权收紧” 的结构(也即所谓 “唯一可信源”)来确保 “消息分发可靠一致” 的目的成为可能,

另一方面它权当自己是 “状态”,而仅提供粘性的设计,

正是这种令人迷惑的设计,导致了所谓 “数据倒灌” 现象的发生。

要想弄清楚 “唯一可信源” 和 “数据倒灌”,得先正确理解和区分 “状态” 和 “事件”。

文章来源

《唯一可信源 读写分离设计 独家解析》

《LiveData 数据倒灌 背景缘由全貌 独家解析》

开源项目一览

包括 腾讯音乐、字节跳动直播 在内的诸多厂商或团队,参考过或正在使用我们开源和维护的《脚手架》等项目,

https://github.com/KunMinX/Jetpack-MVVM-Scaffold

解决 LiveData 数据倒灌问题的 UnPeek-LiveData

https://github.com/KunMinX/UnPeek-LiveData

解决 Navigation 转场卡顿的 Smooth-Navigation

https://github.com/KunMinX/Smooth-Navigation

我和 Flywith24 合作开发维护的 Jetpack MVVM - Java to Kotlin 示例

https://github.com/Jetpack-Missionary/Jetpack-From-Java-To-Kotlin

作为依赖倒置原则 MVP 的 Linkage-RecyclerView

https://github.com/KunMinX/Linkage-RecyclerView

对未来的展望

《重学安卓》发展至今,已从单纯的写作专栏,演化为高手云集的社群,这里平均每两周一位小伙伴告知自己入职字节跳动,也有来自 HencoderPlus 的小伙伴不断加入,

关于写作,《重学安卓》一直保持初心,只写揭露本质的 “深度思考” 文章,授人以鱼且授人以渔。

比起无原则的盲目扩充,我们选择慎重选题和长期修订打磨,确保能恰到好处地覆盖到 关于某领域的 来龙去脉、各式场景、最新动态,

并且考虑到部分读者有截图收藏的需要,我们逐步为专栏文章增设 “语录卡片”,方便已订阅的读者保存到手机、随时查看、以及通过二维码直达原文重温。

最后,感谢小伙伴们一直以来的关心和支持!