共计 3849 个字符,预计需要花费 10 分钟才能阅读完成。
Jetpack Compose 是用于构建原生 Android UI 的古代工具包。Jetpack Compose 应用更少的代码,弱小的工具和直观的 Kotlin API,简化并减速了 Android 上的 UI 开发。这是 Android Developers 官网对它的形容。
本文不是教你 Jetpack Compose 的一些根本应用办法,而是为啥咱们须要 Jetpack Compose 的一些简洁,让咱们对 Jetpack Compose 有更深层次的理解。如果你想看 Jetpack Compose 的疾速上手和根本应用,请看我后面的文章 Android Jetpack Compose 最全上手指南
)
1. 为什么咱们须要一个新的 UI 工具?
在 Android 中,UI 工具包的历史可追溯到至多 10 年前。自那时以来,状况产生了很大变动,例如咱们应用的设施,用户的冀望,以及开发人员对他们所应用的开发工具和语言的冀望。
以上只是咱们须要新 UI 工具的一个起因,另外一个重要的起因是 View.java
这个类切实是太大了,有太多的代码,它大到你甚至无奈在 Githubs 上查看该文件,因为它实际上蕴含了 30000
行代码,这很疯狂,而咱们所应用的简直每一个 Android UI 组件都须要继承于 View。
GogleAndroid 团队的 Anna-Chiara 示意,他们对曾经实现的一些 API 感到遗憾,因为他们也无奈在不毁坏性能的状况下发出、修复或扩大这些 API,因而当初是一个簇新终点的好时机。
这就是为什么 Jetpack Compose 让咱们看到了曙光。
2. Jetpack Compose 的着重点
包含一下几个方面:
-
- 减速开发
-
- 弱小的 UI 工具
-
- 直观的 Kotlin API
2.1 减速开发
如果你是一个高级开发工程师,你总是心愿有更多的工夫来写业务逻辑,而不是花工夫在一些如:动画、色彩变动等事件上,看看上面这个 View:
这个 Material Edit-text 仿佛看起来很简略,然而其实背地有许多货色须要关注,比方:动画、色彩扭转、状态治理等等。
而 Jetpack Compose 为咱们提供了很多开箱即用的 Material 组件,如果的 APP 是应用的 material 设计的话,那么应用 Jetpack Compose 能让你节俭不少精力。
2.2 弱小的 UI 工具
没有正确工具的 UI 工具包是无用的,因而从过来 10 年的教训中能学到不少,Jetpack Compose 团队开始和 JetBrains 单干,以提供开发者弱小的工具包,在 Android Studio 上大规模的反对 Compose 能力。
看一看在 Android Studio 上的体现:‘
上图是应用 Jetpack Compose 开发 UI 时,在 Android Studio 上的预览,你能够看到,在右边编码时,左边你能同时展示 UI 即时预览,比方在明 / 暗模式下的状态切换,都能在左边及时展现进去。
它与咱们当初应用的 Android Studio 中的 text/Design
类似,然而它更加先进,应用很简略,这个性能只能在 Android Studio4.0 以上预览版,开发 compose 时应用。
2.3 直观的 Kotlin API
对于开发者而言,Jetpack Compose 的用处不仅仅是 Android UI,因而用 Kotlin 来编写他们并开源。当然,所有 Android 代码都是开源的,但特别强调的是 Compose 代码,它每天在这里更新(https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master-dev/ui
)。因而,您能够查看和应用代码,同时也能够在此处提供反馈。
因为 Compose 仍在开发之中,因而每个开发人员的反馈都很重要。
3. API 设计
十多年来,Android 团队在创立 API 和审查 API 方面领有丰盛的教训,但有一个播种 - 他们应用 Java 作为编程语言。但有一个问题 - 他们应用的是 Java 作为开发语言。
Jetpack Compose 是第一个应用 Kotlin 正在开发中的大型项目,因而 Android 团队正在摸索 Kotlin API 指南的新世界,以创立一组特定于 Compose API 的指南,该工作仍在进行中,依然有很长的路要走。
4. Compose API 的准则
4.1 一切都是函数
正如我后面的文章所说,Compose 是一个申明式 UI 零碎,其中,咱们用一组函数来申明 UI,并且一个 Compose 函数能够嵌套另一个 Compose 函数,并以树的构造来结构所须要的 UI。
在 Compose 中,咱们称该树为 UI 图,当 UI 须要扭转的时候会刷新此 UI 图,比方 Compose 函数中有 if
语句,那么 Kotlin 编译器就须要留神了。
4.2 顶层函数(Top-level function)
在 Compose 的世界中,没有类的概念,全都是函数,并且都是顶层函数,因而不会有任何继承和档次机构问题。
@Composable
fun checkbox (...)
@Composable
fun TextView (...)
@Composable
fun Edittext (...)
@Composable
fun Image (...)
在此过程中,Compose 函数始终依据接管到的输出生成雷同的 UI,因而,放弃类构造不会有任何坏处。从类构造构建 UI 过渡到顶层函数构建 UI 对开发者和 Android 团队都是一个微小的转变,顶层函数还在探讨之中,还没有公布 release 版。
4.3 组合优于继承
Jetpack Compose 首选组合而不是继承。Compose 会基于其余局部构建 UI,但不会继承行为。
如果你常常关注 Android 或者对 Android 有所理解,你就会晓得,Android 中的简直所有组件都继承于 View 类(间接或间接继承)。比方 EidtText
继承于TextView
,而同时TextView
又继承于其余一些 View, 这样的继承机构最终会指向跟 View 即 View.java
。并且View.java
又十分多的性能。
而 Compose 团队则将整个零碎从继承转移到了顶层函数。Textview
,EditText
,复选框
和所有 UI 组件都是它们本人的 Compose 函数,而它们形成了要创立 UI 的其余函数,代替了从另一个类继承。
4.4. 信赖繁多起源
信赖繁多起源 是构建整个 Jetpack Compose 一项十分重要的个性
。如果您习惯了现有的 UI 工具包,那么您可能会晓得执行点击的工作原理。如下代码所示:
@Override
public boolean performClick(){setChecked(!mChecked);
final boolean handled = super.performClick();
...
}
首先,它扭转 view 的状态,而后执行动作,这会导致许多 bug,例如复选框,因为它首先从 已选中状态
变为 未选中
,反之亦然,而后因为某种原因,如果操作失败,开发人员必须手动调配先前的状态。
而在 Compose 中呢,性能正好相同。在此,复选框等性能具备两个参数。一个是在 UI 中显示状态,另一个是 lambda 函数,用于察看 UI 应相应更改的状态变动。
@Composable
fun Checkbox(checked : Boolean,
onCheckedChange : ((Boolean) -> Unit)),
....)
5. 深刻理解 Compose
如上图所示,Compose 在运行时分为四个局部。让咱们一一看一下。
5.1 Core
顾名思义,这是 Compose 的外围,如果您不想深刻学习,能够跳过它。
基本上,外围蕴含四个构建模块:
- 绘制(Draw)
- 布局(Layout)
- 输出(Input)
- 语义(Semantics)
1、Draw — Draw 给了你拜访 Canvas 的能力,因而你能够绘制你要的任何自定义 View
2、Layout — 通过布局,咱们能够测量事物并相应地搁置视图。
3、Input — 开发人员能够通过输出拜访事件并执行手势
4、Semantics — 咱们能够提供无关树的语义信息。
5.2. Foundation
Foundation 的外围是收集下面提到的所有内容,并独特创立一个 形象层
,以使开发人员更轻松调用。
5.3 Material
在这一层,所有的 Material 组件将会被提供,并且咱们能够通过提供的这些组件来构建简单的 UI。
这是 Compose 团队所做的杰出工作中最精彩的局部,在这里,所有提供的 View 都有 Material 反对,因而,应用 Compose 来构建 APP, 默认就 Material 格调的,这使得开发者少了很多工作。
6. 插槽 API
插槽 API 的呈现是为了给开发人员留出了很多空间,以便他们能够执行所需的任何自定义操作,Android 团队试图猜想开发人员可能会想到的许多自定义设置,但他们无奈始终设想开发人员的想法,例如应用带 drawable
的 TextView。
因而,Compose 团队为组件留出了空间,以便开发人员能够执行所需的任何操作,例如 应用按钮
。你能够 保留文本
或带有图标的文本
或所需的任何内容
,如下所示
以上就是本文的全部内容,感激你的浏览,如果感觉不错,请点赞????、转发✈️、珍藏???? 三连反对一波。
作者 | SG
译者 | 仍然范特稀西
编辑 | 仍然范特稀西
地址 | https://medium.com/better-pro…
每天都有干货文章继续更新,能够微信搜寻
「技术最 TOP」
第一工夫浏览,回复【思维导图】【面试】【简历】有我筹备一些 Android 进阶路线、面试领导和简历模板送给你