Android 代码布局 —— 从入门到放弃(一)

众所周知,在传统的 Android 应用开发中我们使用 XML 编写 layout , 用 Java 编写实现。 但是这样的话就涉及到在运行时解析 XML 和反射构建 View , 还涉及到遍历 View Tree 寻找 layout id 的问题。 人们还发明了一大堆方案在保持代码可维护性的同时避免 findViewById() 带来的性能损失, 例如 ViewHolder 以及用 HashMap 再缓存一次(Kotlin Android Plugin 的 View Binding 就是这样做的)。

于是就会有一些人 例如像我这样的性能强迫症患者 会尝试去使用 Java 代码手动创建 layout 。 这听起来就是个一举多得的事情,随便总结一下就有以下优点:

  1. 再也不需要在运行时解析 xml 和使用反射构建 View 了。
  2. 在手动创建 View 的同时就能持有对应 View 的引用, 避免在运行时浪费时间 findViewById() 的困扰。
  3. 可以安全地混淆我们的自定义 View 了。
  4. layout 的代码可以混淆得连 它的亲妈 你自己 都认不出来, 要知道 parse 和修改 Android binary xml 可比更改和重新编译 smali 容易多了。

最成功的 Java 代码布局的例子非 Telegram 莫属, 在阅读正文之前, 你可以先欣赏一下他们的 布局代码

Android

2017 年终总结

怎么这年头连写年终总结都成为潮流了。。。

总之这一年过得好快呀,2016 年终总结还在首页上,2018 年就到了。

blog

使用 Kotlin 实现 Android 开发中的 Parcelable

先来看看 Android Studio 给的自动实现。

新建一个数据类,让它实现 Parcelable

data class Worker(
        var id: Int,
        var name: String,
        var tasks: MutableList<Int>
) : Parcelable

使用 Android Studio 自带的 Add Parcelable Implementation ,然后你就得到了。。。

AndroidKotlin

通过 ssh 代理连接 ssh 服务器

一大早赶去上第一节课, 想起好像很久都没有升级过手机上的 LineageOS 了, 可以刷一波。 于是拿起手机打开 Termux, 像往常一样 ssh 回寝室电脑, 输入 systemctl start [email protected], 按下回车输入密码, 连上教育网准备更新 aosp 镜像和 linea……

喵喵喵? 怎么 ssh 突然卡死了?

Linux

2016 年终总结

呐, 2016 年马上就要过去了,按照每年的习惯记一下今年发生在自己身上的一些事情,以免忘了自己一整年都干了什么。。。

blog