Android 代码布局 —— 从入门到放弃(一)
众所周知,在传统的 Android 应用开发中我们使用 XML 编写 layout , 用 Java 编写实现。 但是这样的话就涉及到在运行时解析 XML 和反射构建 View , 还涉及到遍历 View Tree 寻找 layout id 的问题。 人们还发明了一大堆方案在保持代码可维护性的同时避免 findViewById()
带来的性能损失, 例如 ViewHolder
以及用 HashMap
再缓存一次(Kotlin Android Plugin 的 View Binding 就是这样做的)。
于是就会有一些人 例如像我这样的性能强迫症患者 会尝试去使用 Java 代码手动创建 layout 。 这听起来就是个一举多得的事情,随便总结一下就有以下优点:
- 再也不需要在运行时解析 xml 和使用反射构建 View 了。
- 在手动创建 View 的同时就能持有对应 View 的引用, 避免在运行时浪费时间
findViewById()
的困扰。 - 可以安全地混淆我们的自定义 View 了。
- layout 的代码可以混淆得连
它的亲妈你自己 都认不出来, 要知道 parse 和修改 Android binary xml 可比更改和重新编译 smali 容易多了。
最成功的 Java 代码布局的例子非 Telegram 莫属, 在阅读正文之前, 你可以先欣赏一下他们的 布局代码 。