Jetpack Compose,不止是一个UI框架!




Jetpack Compose是用于构建原生Android UI的现代工具包。 Jetpack Compose使用更少的代码,强大的工具和直观的Kotlin API,简化并加速了Android上的UI开发。这是Android Developers 官网对它的描述。

本文不是教你Jetpack Compose 的一些基本使用方法,而是为啥咱们须要Jetpack Compose 的一些简洁,让咱们对Jetpack Compose 有更深层次的了解。若是你想看Jetpack Compose 的快速上手和基本使用,请看我前面的文章Android Jetpack Compose 最全上手指南java

1. 为何咱们须要一个新的UI 工具?

在Android中,UI工具包的历史可追溯到至少10年前。自那时以来,状况发生了很大变化,例如咱们使用的设备,用户的指望,以及开发人员对他们所使用的开发工具和语言的指望。android

以上只是咱们须要新UI工具的一个缘由,另一个重要的缘由是View.java这个类实在是太大了,有太多的代码,它大到你甚至没法在Githubs上查看该文件,由于它实际上包含了30000行代码,这很疯狂,而咱们所使用的几乎每个Android UI 组件都须要继承于View。面试

GogleAndroid团队的Anna-Chiara表示,他们对已经实现的一些API感到遗憾,由于他们也没法在不破坏功能的状况下收回、修复或扩展这些API,所以如今是一个崭新起点的好时机。编程

这就是为何Jetpack Compose 让咱们看到了曙光。微信

2. Jetpack Compose的着重点

包括一下几个方面:编程语言

    1. 加速开发
    1. 强大的UI工具
    1. 直观的Kotlin API
2.1 加速开发

若是你是一个初级开发工程师,你老是但愿有更多的时间来写业务逻辑,而不是花时间在一些如:动画、颜色变化等事情上,看看下面这个View:ide

这个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团队则将整个系统从继承转移到了顶层函数。TextviewEditText复选框和全部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)

一、Draw — Draw 给了你访问Canvas的能力,所以你能够绘制你要的任何自定义View

二、Layout — 经过布局,咱们能够测量事物并相应地放置视图。

三、Input — 开发人员能够经过输入访问事件并执行手势

四、Semantics — 咱们能够提供有关树的语义信息。

5.2. Foundation

Foundation的核心是收集上面提到的全部内容,并共同建立一个抽象层,以使开发人员更轻松调用。

5.3 Material

在这一层,全部的Material组件将会被提供,而且咱们能够经过提供的这些组件来构建复杂的UI。

这是Compose团队所作的出色工做中最精彩的部分,在这里,全部提供的View都有Material支持,所以,使用Compose来构建APP, 默认就Material风格的,这使得开发者少了不少工做。

6. 插槽API

插槽API的出现是为了给开发人员留出了不少空间,以便他们能够执行所需的任何自定义操做,Android团队试图猜想开发人员可能会想到的许多自定义设置,但他们没法一直想象开发人员的想法,例如使用带drawable的TextView。

所以,Compose团队为组件留出了空间,以便开发人员能够执行所需的任何操做,例如使用按钮。你能够保留文本带有图标的文本所需的任何内容,以下所示

以上就是本文的所有内容,感谢你的阅读,若是以为不错,请点赞👍、转发✈️、收藏📁 三连支持一波。

天天都有干货文章持续更新,能够微信搜索「 技术最TOP 」第一时间阅读,回复【思惟导图】【面试】【简历】有我准备一些Android进阶路线、面试指导和简历模板送给你

相关文章
相关标签/搜索