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进阶路线、面试领导和简历模板送给你
发表回复