实践EX 是对实践代码中一些独立于 Android 基础知识之外的技术点的补充,不看也不影响理解 Android 开发的内容,但实际工作中这些也是比较重要的。
众所周知,前端技术更迭速度特别快,四舍五入下来 Android 也是差不多的情况。一个最简洁直接的证明就是 findViewById 的发展。
findViewById 的历史
因为 Android 采取 xml 搭建布局,运行时通过 setContentView 将 xml 文件转换成 View 对象,所以获取具体 View 对象是最最常用的 API 之一。然而 findViewById 并不能算好用,属于典型的模板代码,从 Android 发展之初到现在涌现过各种不同的技术方案避免这部分模板代码。
我是 2015 年开始接触 Android 开发的,先后经历过 xutils 的运行时注解、ButterKnife 的编译时注解、Kotlin 的 kotlin-android-extensions 和 ViewBinding,中间还经历了官方 API 还给 findViewById 加了泛型参数避免类型强转,公司尝试推广使用 DataBinding 等额外情况。如今,ViewBinding 即将成为终极方案了。
从使用体验上看,ViewBinding 并不是最优秀的,个人感觉 kotlin-android-extensions 更加流畅,毕竟样板代码是越少越快乐,可惜还是已经要废弃了,官方还出了迁移文档:developer.android.com/topic/libra… 。
那就使用 ViewBinding
ViewBinding 的使用几乎没有门槛,理解起来难度也不大,有作为终极方案的实力。
流程上分三步:
- 修改 build.gradle,开启 ViewBinding 功能
- 用 ViewBinding 替代 setContentView 的 xml 引用
- 通过 ViewBinding 对象引用 View
还用上次 Demo 中的例子:
在 build.gradle 中配置 ViewBinding,注意是在 android 的作用域。
build.gradle 是描述 Android apk 如何构建的脚本文件,包含编译打包过程中的全部配置,只要有 gradle-wrapper 和 build.gradle 就能把源码变成 apk,并不需要 Android Studio。
ActivityJuejinMainBinding 根据 xml 的名称自动生成的类,如果找不到可以 build 一下。通过 EmptyActivity 模板创建的 Activity 会自带 setContentView 引用 layout,要记得修改而不是新增一个。
最后的使用就很简单啦。
ViewBinding 的样板代码中 Binding 类是动态生成的,所以没办法通过基类封装,这是比较痛苦的一点。
结
又是加班的一天,Code Review 真是让人又爱又恨。今天依旧在零散地解释实践部分使用的技术,我好水啊。明天再努力吧,兄弟们晚安。