什么是Compose?
- Jetpack Compose 是用于构建原生Android界面的新工具包
- Compose也不是View和ViewGroup,而是重新写了一套全新的渲染、布局和触摸机制。----Flutter
Flutter?
flutter跨平台,跨平台还很流畅,没有使用原生的控件,而是从底层,更下层的api,在Android直接用canvers直接绘制出来,独立做了一套渲染的逻辑,老版的跨平台,用原生的控件做拼装,渲染要经过一层转换,影响效率。
Compose是UI库,用kotlin编写,首字母用大写字母,可以有更好的辨识度。
- Compose对加了Composable注解的函数做出不一样的编译逻辑,让这些函数在App运行的时候变成我们的界面,让它们正确的显示,干预编译过程。
干预编译过程
- 注解处理器
- Compose直接使用编译器插件干预编译,编译器插件就是对编译器多个小修改,做个外挂,
注解处理器和编译器插件区别?
- 注解处理器是修改kotlin代码,修改完之后再统一编译,不干预编译过程,干预编译前。
- 编译器插件直接修改字节码的输出逻辑。
Compose和协程的suspend关键字很像
-都是干预编译过程,调用方式也很像,机制也差不多一样。
机制也差不多一样Compose为什么不用关键字呢
关键字是语言层面通用的东西,Compose不是语言层面的东西,是UI库
Compose好在哪?
-
- 声明式的UI,传统的是命令式UI(就像java、kotlin来手动更新界面,命令界面改怎么更新)
- 声明式的UI,传统的是命令式UI(就像java、kotlin来手动更新界面,命令界面改怎么更新)
什么是声明式UI?
- 只需要把界面给声明出来,而不需要手动更新 text值改变后,Text会自动变化,不需要重新设置。
- 是一种框架特性,和语言与写法都无关。
- 好在哪?省事,省很多事!(本来是由我们做,现在由框架做)就像Data Binging
那我为什么不干脆用DataBinding?
DataBinding框架或者模式都不能做到声明式UI,Compose比DataBinding更强!
- 没有功能限制
-
- 去掉了xml
- 传统写法:xml + java(kotlin) 两种语言的交互和牵扯----局限性
- Compose只能用kotlin,避免了交互和牵扯
- 为什么不用纯java/kotlin写ui?太费劲
- 所以,去掉xml也算好处。
-
- 独立于操作系统
-
- 方便调试
结构
创建项目会自动创建主题文件
- Color是颜色
- shape是形状
- Theme是主题
- type是字体
Compose所解决的问题
- 在编写可维护的软件时,我们的目标是最大程度的减少耦合增加内聚
- 尽可能的将相关代码组织在一起,以便我们可以轻松的维护他们,并方便我们随着应用的增长而扩展我们的代码,这个称之为关注分离点。