这是Google出品的现代化工具包用来构建Android UI。用它可以更快更简便的进行UI界面开发。这个工具包版本最新只有0.1.0-dev08,离稳定可用应该至少还有半年,所以心情放轻松,来认识一下它吧。
Android编写UI有哪些痛点?
- 不方便,需要在xml里写布局文件,要精通各种Layout,比如ConstraintLayout会用了吗?
- 历史包袱,10来个大版本的迭代,现在UI的祖先View类已经3w多行,而绝大部分的UI控件都继承于View。意味你写一个按钮或者一个TextView都会受这个祖先影响。继承了很多没有用到的特性和功能。
- 性能开销,基类对象内存开销,解析xml的额外开销
- 预览和Reload不方便,Android的Instant Run起作用的各种Android版本限制和Flutter毫秒级的hot reload完全不能比。
- 不好测试,xml只能通过集成测试,如果是代码构建通过单元测试就可以覆盖了。
Jetpack Compose 的目标
Less code
用更少的代码做更多的事情,避免继承类的错误,因此代码简单易维护。众所周知,从维护的角度看,组合优于继承。
Intuitive
只需定义你的UI,Jetpack Compose就会处理其余的工作。 随着应用状态的变化,你的用户界面会自动更新
Accelerate Development
与所有现有代码兼容,因此你可以随时随地采用。 通过实时预览和完整的Android Studio工具链支持快速迭代
Powerful
通过直接访问Android平台API以及对Material Design,Dark主题,动画等的内置支持,创建美观的应用程序。
准备工作
新建一个工程,选择Empty Compose activity 模版
更新下依赖
1 | android { |
实操
先写一个简单的效果
1 | class ComposeActivity : AppCompatActivity() { |
可以看到代码是非常简短直观的。
写一个ListView
1 | // 直接构建 |
同样简洁直观,这里用两种实现的原因是直接构建有很大性能问题, pixel 3 XL当itemSize超过100个时明显有延迟,1000个时已经outMemony了。用AdapterList没有Memony问题,但滑动体验很僵硬,以Recycle 10分作为参照的话,AdapterList从体验上只能给1分。
感想
上手体验
愉悦,无论是声明函数式写法还是无所不在的组合思想体现,都让构建UI变的简单直观。更有Kotlin加持,非常舒服,有Flutter那味,而且语法更清爽。
完成度
不高,随处可见的breakChange(比如Text,Layout,Modifier dev08相对dev07的改动),说明该项目离稳定版还有很长一段时间。反过来看,即使是这么早期的版本也有这种开发体验,我很期待最终的Release版本。
可能影响
ConstraintLayout用着很舒服,但Jetpack Compose很可能是Android native UI构建的终解。它吸收前端(reactJS,Flutter,VueJs)的优点并集大成,加以Kotlin优秀的语言特性,还有深度优化定制的Android studio工具链。完全可以期待更多,比如解偶Android平台依赖,写UI不用考虑版本差异;更加符合直觉的开发体验;实时的Preview;毫秒级的HotReload。