Jetpack Compose学习笔记
在前不久的 Android Dev Summit '19 上,Jetpack Compose 终于发布了一个可直接获得的预览版。现在的版本还是 0.1.0-dev02,处于非常早期的版本,官方也再三强调非常有可能产生变化且无法用于生产环境。不过我认为这是简单了解一下 Compose 的好时机。有备而无患。
首先来了解一下现在尝试 Compose 所需要的环境:
- Android Studio 4.0 Canary1
- Kotlin 1.3.60-eap-25
- 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 框架会关注:
- 对于给定的数据,UI 是如何被展示的;
- 怎么对事件进行响应;
- 不考虑 UI 之前的状态对当前的状态产生的影响。
也就是说,它只关心当前的数据(状态)会渲染出什么样的外观,而不把数据当成一个拥有上下文的状态流来看待。
总结
再次强调,Compose 处于很早期的阶段,API 也好,具体的底层实现也好,都很可能会发生变化。官方的示例 JetNews 也存在一定的性能问题。
所以我觉得普通开发者还不需要去了解具体使用的细节。但还是有几个建议:
- 如果还没学习 Kotlin,快学吧。
- 然后考虑学习一下 Kotlin coroutine。
- 学习已经比较成熟的声明式 UI 框架,比如 React 和 Flutter。考虑了解一下它们的应用和原理,比如状态管理的最佳实践和 virtual DOM 等。这样可以快速掌握同类型的 UI 框架。
链接:https://pan.baidu.com/s/1_4PIUb-Yl68aTW9Bw95iJA
提取码:tnav
Jetpack Compose学习笔记相关推荐
- Compose 学习笔记(一)—— Compose 初探
历时两年,Android 团队推出了全新的原生 Android 界面 UI 库--Compose.当然,Compose 也是属于 Jetpack 工具库中的一部分,官方宣称可以简化并加快 Androi ...
- Compose学习笔记1-compose、state、flow、remember
新建一个 compose 项目 开始前,请下载最新版本的 Android Studio Arctic Fox,然后使用 Empty Compose Activity 模板创建应用. 我们先看看在 ap ...
- Android应用开发 00:Jetpack Compose学习 生日贺卡 图片 Compose象限 名片
写一张生日贺卡 代码实现 package com.example.greetingcardimport android.media.Image import android.os.Bundle imp ...
- 菜鸟窝Kotlin+Jetpack实战学习笔记
Android四大组件有Activity,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器. Android应用程序由一些零散的有联系的组件组 ...
- Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~
又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...
- 移动开发 Jetpack Compose 组件布局
Jetpack Compose 是用于构建原生 Android 界面的新工具包.它可简化并加快 Android 上的界面开发,使用更少的代码.强大的工具和直观的 Kotlin API,快速让应用生动而 ...
- Jetpack-Compose 学习笔记(六)——Compose 主题 Theme 一探究竟,换肤还能如此 Easy Silky?
断更一时爽,一直断更一直爽~ 哈哈哈,就当给自己放了个长假吧.最近的行情太糟了,身边有同学已经被毕业,两个多月终于降薪找到下家··· 这里呼吁大家一定要存好六个月没有工作还能正常生活的银子,以备不时之 ...
- Android Jetpack Components of LiveData 学习笔记
Android Jetpack Components of Lifecycle 学习笔记 Android Jetpack Components of LiveData 学习笔记 Android Jet ...
- Docker 学习笔记 - 进阶四 Docker网络和 Docker compose
Docker 学习笔记 - 进阶四 Docker网络和 Docker compose 4. docker 网络 4.1 docker network是什么 4.1.1 docker不启动,默认网络情况 ...
最新文章
- vector大小为1,如果直接输出它-2,为何不是-1?
- 计算机网络作业答案吴,中国大学《2020春季课程-计算机网络应用吴迪》答案全部2020高校邦《羽毛球》作业题库答案...
- nosql简答什么是最终一致性_可靠消息最终一致性方案中预发送作用是什么
- lucene 高亮显示
- UI标签库专题一:JEECG智能开发平台 BaseTag(样式表和JS引入标签)
- node.js通过edge访问.net动态链接库
- LeetCode--91. 解码方法(动态规划)
- 机械的东西学的难 还是计算机的难,最难学十大工科专业 不想累成狗就别去(高薪)...
- 图解设计模式(23种)
- 和菜鸟们一起攻克金盾2018SS加密视频
- java put方式提交_java – 通过HTTP PUT请求上传文件
- 用户一键登陆,如何实现?了解一下!
- 论文笔记:NAOMI: Non-Autoregressive MultiresolutionSequence Imputation
- 四旋翼无人机——导航、制导与控制的概念
- 文章学习(一)方法类:利用CNN从专利图像导出设计特征向量
- U盘加密软件怎么选?
- 2018年人工智能发展回忆录:芯片热、价格战、争落地
- 阿里云推出应用配置管理新工具 助力企业效能几何式提升
- ps3手柄连Linux,树莓派连接 Dualshock3(ps3手柄)
- STM32H7 ADC偏移校准以及线性度校准
热门文章
- 语言生日创意代码_你生日那天的宇宙什么样子知道?我全部给你吧!
- oracle外部表导入,oracle 外部表导入时间日期类型数据
- mysql 连接查询_Swoole 实战:MySQL 查询器的实现(协程连接池)
- 【⭐】Java—Spring-—数据库操作—使用内置连接池,报读取不到驱动错误。Could not load JDBC driver class。...
- for循环中执行setTimeout问题(任务队列的问题)
- 什么叫Web前端?web前端HTML5学习方法分享
- Python 堡垒机介绍
- ElasticSearch服务器操作命令
- XTU -1231 人生成就 (dp + 记录最优解的个数)
- [论文泛读]Web服务组合综述相关论文1(3篇)