在前不久的 Android Dev Summit '19 上,Jetpack Compose 终于发布了一个可直接获得的预览版。现在的版本还是 0.1.0-dev02,处于非常早期的版本,官方也再三强调非常有可能产生变化且无法用于生产环境。不过我认为这是简单了解一下 Compose 的好时机。有备而无患。

首先来了解一下现在尝试 Compose 所需要的环境:

  1. Android Studio 4.0 Canary1
  2. Kotlin 1.3.60-eap-25
  3. minSdkVersion 21(也就是 Android 5.0)

为什么需要 Compose

Android 已经十年,设备的变化非常大,也涌现出很多心的开发技术和思想,但用来开发 UI 的工具却还依旧停留在十年前。不少控件已经过时而且背负了太多历史包袱,重新开始或许是更好的选择。

开发 UI 需要编写 XML 布局,通过代码加载,可能还需要通过 XML 来定义 style,为了编写一个界面要做的工作太多了。而且考虑到 Activity 和 Fragment,需要顾及的就更多了。如果要自定义一个 View,要做什么工作?我想“自定义 View”这几个字,都能吓退一批人吧。

并且大量 UI 工具与系统的版本绑定,新功能新修复无法及时让开发者和用户受益。Material design?Who cares?那是 5.0 以上才大部分支持的东西,更别提 shape theming 了。

原先的控件使用了一些只有官方能使用的黑魔法,也就是 hidden API。Compose 将完全在公开的 API 上进行构建,官方使用的广大的普通开发者也能够使用。

插点私货。我偶尔会看着隔壁 Flutter 流下羡慕的泪水。它提供了大量官方的控件,应对各种场景,而且在各种系统版本上提供统一的行为。而我却需要满世界找非官方的实现,一个个查看是否满足我的需求,是否还在维护,是否需要自己魔改。当然,我无比感恩这些开发者的贡献,但我觉得我们应该被 Android 官方善待。

然后是 data flow。对于 UI 编程来说,分发事件和接收状态是与开发者关联最密切的事情。而现有的 android.widget 在这两个方面都做得不够好:状态的管理比较混乱;事件在分发时就已经改变了控件的状态;listener 可以跟 Kotlin 结合更紧密提供更合适的做法。

声明式 UI 编程

声明式编程通常是相对于命令式编程(imperative programming)来说的,不关注编程中具体的过程,而是以最后的结果为重点。在 UI 这一特定的领域来说,声明式编程则意味着:当状态发生变化时,声明式框架会自动更新视图。

声明式的 UI 框架会关注:

  1. 对于给定的数据,UI 是如何被展示的;
  2. 怎么对事件进行响应;
  3. 不考虑 UI 之前的状态对当前的状态产生的影响。

也就是说,它只关心当前的数据(状态)会渲染出什么样的外观,而不把数据当成一个拥有上下文的状态流来看待。

总结

再次强调,Compose 处于很早期的阶段,API 也好,具体的底层实现也好,都很可能会发生变化。官方的示例 JetNews 也存在一定的性能问题。

所以我觉得普通开发者还不需要去了解具体使用的细节。但还是有几个建议:

  • 如果还没学习 Kotlin,快学吧。
  • 然后考虑学习一下 Kotlin coroutine。
  • 学习已经比较成熟的声明式 UI 框架,比如 React 和 Flutter。考虑了解一下它们的应用和原理,比如状态管理的最佳实践和 virtual DOM 等。这样可以快速掌握同类型的 UI 框架。

链接:https://pan.baidu.com/s/1_4PIUb-Yl68aTW9Bw95iJA
提取码:tnav

Jetpack Compose学习笔记相关推荐

  1. Compose 学习笔记(一)—— Compose 初探

    历时两年,Android 团队推出了全新的原生 Android 界面 UI 库--Compose.当然,Compose 也是属于 Jetpack 工具库中的一部分,官方宣称可以简化并加快 Androi ...

  2. Compose学习笔记1-compose、state、flow、remember

    新建一个 compose 项目 开始前,请下载最新版本的 Android Studio Arctic Fox,然后使用 Empty Compose Activity 模板创建应用. 我们先看看在 ap ...

  3. Android应用开发 00:Jetpack Compose学习 生日贺卡 图片 Compose象限 名片

    写一张生日贺卡 代码实现 package com.example.greetingcardimport android.media.Image import android.os.Bundle imp ...

  4. 菜鸟窝Kotlin+Jetpack实战学习笔记

    Android四大组件有Activity,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器. Android应用程序由一些零散的有联系的组件组 ...

  5. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  6. 移动开发 Jetpack Compose 组件布局

    Jetpack Compose 是用于构建原生 Android 界面的新工具包.它可简化并加快 Android 上的界面开发,使用更少的代码.强大的工具和直观的 Kotlin API,快速让应用生动而 ...

  7. Jetpack-Compose 学习笔记(六)——Compose 主题 Theme 一探究竟,换肤还能如此 Easy Silky?

    断更一时爽,一直断更一直爽~ 哈哈哈,就当给自己放了个长假吧.最近的行情太糟了,身边有同学已经被毕业,两个多月终于降薪找到下家··· 这里呼吁大家一定要存好六个月没有工作还能正常生活的银子,以备不时之 ...

  8. Android Jetpack Components of LiveData 学习笔记

    Android Jetpack Components of Lifecycle 学习笔记 Android Jetpack Components of LiveData 学习笔记 Android Jet ...

  9. Docker 学习笔记 - 进阶四 Docker网络和 Docker compose

    Docker 学习笔记 - 进阶四 Docker网络和 Docker compose 4. docker 网络 4.1 docker network是什么 4.1.1 docker不启动,默认网络情况 ...

最新文章

  1. vector大小为1,如果直接输出它-2,为何不是-1?
  2. 计算机网络作业答案吴,中国大学《2020春季课程-计算机网络应用吴迪》答案全部2020高校邦《羽毛球》作业题库答案...
  3. nosql简答什么是最终一致性_可靠消息最终一致性方案中预发送作用是什么
  4. lucene 高亮显示
  5. UI标签库专题一:JEECG智能开发平台 BaseTag(样式表和JS引入标签)
  6. node.js通过edge访问.net动态链接库
  7. LeetCode--91. 解码方法(动态规划)
  8. 机械的东西学的难 还是计算机的难,最难学十大工科专业 不想累成狗就别去(高薪)...
  9. 图解设计模式(23种)
  10. 和菜鸟们一起攻克金盾2018SS加密视频
  11. java put方式提交_java – 通过HTTP PUT请求上传文件
  12. 用户一键登陆,如何实现?了解一下!
  13. 论文笔记:NAOMI: Non-Autoregressive MultiresolutionSequence Imputation
  14. 四旋翼无人机——导航、制导与控制的概念
  15. 文章学习(一)方法类:利用CNN从专利图像导出设计特征向量
  16. U盘加密软件怎么选?
  17. 2018年人工智能发展回忆录:芯片热、价格战、争落地
  18. 阿里云推出应用配置管理新工具 助力企业效能几何式提升
  19. ps3手柄连Linux,树莓派连接 Dualshock3(ps3手柄)
  20. STM32H7 ADC偏移校准以及线性度校准

热门文章

  1. 语言生日创意代码_你生日那天的宇宙什么样子知道?我全部给你吧!
  2. oracle外部表导入,oracle 外部表导入时间日期类型数据
  3. mysql 连接查询_Swoole 实战:MySQL 查询器的实现(协程连接池)
  4. 【⭐】Java—Spring-—数据库操作—使用内置连接池,报读取不到驱动错误。Could not load JDBC driver class。...
  5. for循环中执行setTimeout问题(任务队列的问题)
  6. 什么叫Web前端?web前端HTML5学习方法分享
  7. Python 堡垒机介绍
  8. ElasticSearch服务器操作命令
  9. XTU -1231 人生成就 (dp + 记录最优解的个数)
  10. [论文泛读]Web服务组合综述相关论文1(3篇)