欢迎光临散文网 会员登陆 & 注册

Jetpack Compose使用体验

2021-08-16 05:42 作者:スレーブ_スレイヤー  | 我要投稿

这几天把Jetpack全家桶用了个遍,其中Compose算是印象最深的了。xml写布局真的很痛苦,因为重复的事情太多了,写布局,给id,Activity里面获取id,设置点击事件......这一套我代码我从16年写到现在,别提多折磨人了。

现在好了,id不用给,点击事件在定义“控件”时直接就可以写,不用忍受在xml和java代码之间反复横跳的折磨,一个kotlin全部搞定。

那么进入正题,这几天使用Compose的体验。说是体验,其实也就写了一个小工具,可以在手机电脑之间传输数据,且不需要电脑端装什么软件。以前手机电脑传文件都是用的QQ,实在没有必要,明明就在同一局域网,还非要通过腾讯的服务器中转,很蠢。

然后网上搜了一下类似的软件,都需要电脑端也装一个软件。用FTP又太臃肿了,而且安卓端的FTP服务器没一个能用的......最后还是自己写了一个,终于舒服了,地址:

https://github.com/ColorlessCat/Kamui

原理是实现一个简单的Web服务器,用电脑上的浏览器去访问,通过Http请求传输文件。

然后Jetpack Compose体验下来,最直观的感受就是:我是自由的!

首先Compose把视图的更新问题给解决了,如果不用DataBinding,以前在数据更新时是需要手动更新View的。具体一点的话,我写过一个类似音乐播放器的东西,随着时间流逝,就需要更新进度条,当时的处理是提供一个接口,让那些需要得到播放进度的类来实现这个接口,然后进度更新时回调接口里的方法......其实就是观察者模式。

这件事现在Compose是自动处理的,当数据更新时会触发“重组”,所有视图自动更新,而且可以配合LiveData和Viewmodel使用。

所以作为使用者,生命周期,视图的更新等等问题都可以不用考虑,可以只关注功能和UI两个部分了。

刚刚说了重组,一个Compose组件就是一个函数,所谓的重组就是重新调用一次这个函数。因此写布局的思维也变得自由了,比如以前要隐藏一个View,得设置Visibility为GONE,想要寻找隐藏的代码时就很麻烦。现在如果知道一个“控件”是可能被隐藏的,那直接加一个boolean类型的变量然后在控件前加个if就可以了。怎么说呢,UI的变化变得更加直观了,View那一套因为控制UI的代码七零八落,有的时候得翻好久才能找到,而且UI和数据黏在一起,少了一个就没法运行,现在就清晰太多了。

然后Compose有一种“实时渲染”的感觉。体现在代码上就是,假如给一个组件多次设置padding,后设置的padding并不会覆盖之前的设置,而是会增加padding。也就是说“控件”的渲染是一行代码一行代码往下进行的,这一点很重要,会改变写布局的思维。我一开始想把一个边框按钮的边框给去掉,但是怎么设置border都没用,边框根本去不掉.....睡了一觉才想明白,这样才对,以前TextView经常可以当Button用,很多控件的使用范围并没有那么严格规定,现在好了,边框按钮就是边框按钮,它必须有边框,就很合理。

其实很多东西教程已经说过了,比如什么声明式,命令式......但是果然还是得用自己的话说出来。“声明式 命令式......”类似的概念谁都会说,但这些概念到底有什么意义,对使用有什么影响,还是需要去思考的。

总结,View体系用起来好像在搭积木,搭完还得做各种装饰,这个过程麻烦且可能把所有积木推倒;Compose用起来就好像在画画,写一行代码就画一笔,而且不用思考画完以后怎么去修改,因为每一个Compose组件都是函数,所以画出来的并不是一个结果,而是过程,在声明一个界面的同时就已经把诸如更新,点击事件,动画,隐藏显示等等问题给处理了。

Jetpack Compose YYDS!








Jetpack Compose使用体验的评论 (共 条)

分享到微博请遵守国家法律