Flutter 视图系统和 Android 的本质区别

2020-02-05 20:41:26 +08:00
 KunMinX

搜了一天,没看到满意的答案。

网文多是人云亦云地鼓吹 “组合优于继承”,可我认为 这并不是 Flutter 视图系统和 Android 视图系统区别的本质所在

因为所谓的 “组合”,也不过是将 Canvas 分类为 图形、图片、文字 等常用的成分,供自定义视图的绘制用 —— Android 本身就可以通过动态编码基于 Drawable 做到这一点。

我在意的是,Flutter 视图系统本质上存在怎样的优越性,使得 Jetpack Compose 和 SwiftUI 都朝着类似的方向重新设计视图系统。

比如 Android 视图系统以 surface 为单位进行绘制,每个 surface 中可能就每个层级的控件内容进行多次叠加的渲染(也才有了过度绘制的情况 和 解决过度绘制的 性能优化的思路)

那么 Flutter 是什么情况呢?难道 Flutter 的渲染一次搞定,不用多次渲染叠加?那它的性能检测依据是什么?遇到掉帧问题应基于怎样的思路去改善?

就是这些最本质的东西,没找到线索去理解,所以先立个贴请教万能的 v 友,看看有没有自己看的好的文章,推荐一二。

3691 次点击
所在节点    程序员
14 条回复
MrUser
2020-02-05 20:49:16 +08:00
前排小板凳,坐等大神出现
ai277014717
2020-02-05 21:10:15 +08:00
我猜主要是因为声明式的语法要比什么 frame 计算,xml 清晰
局部刷新一直都存在,flutter 的 widget 只不过把接口收敛全部由系统接管。没什么操作空间。遇到问题只能优化交互和树形结构?想要精益化后面或许会添加更多接口
mxalbert1996
2020-02-05 22:26:38 +08:00
跟技术细节没什么关系,完全是因为声明式的语法。
murmur
2020-02-05 23:19:42 +08:00
flutter 没什么优越性啊,大吹特吹 flutter 的不就一个闲鱼么,这阵势照着 react native 不知道小了多少
murmur
2020-02-05 23:21:18 +08:00
组合优于继承这是 vue 的思路,刨去底层开发者,这是互联网时代符合正常人的设计思路
我造车,我需要引擎+框架+轮胎,我如果要冷气那就装空调,而不是空调车继承汽车继承车辆(抽象)实现机械(接口)
Austaras
2020-02-05 23:30:13 +08:00
> Flutter 视图系统本质上存在怎样的优越性,使得 Jetpack Compose 和 SwiftUI 都朝着类似的方向重新设计视图系统。

因为这三者都在抄 react
carpediemvv
2020-02-06 01:24:08 +08:00
技术都是相同的,就像语言一样,慢慢都有同一套东西,只不过是写法不同。
kejinlu
2020-02-06 11:27:20 +08:00
大 app 别轻易尝试 flutter,目前好多东西还不成熟。
kejinlu
2020-02-06 11:32:07 +08:00
flutter 底层渲染其他也没有什么一次完成的说法,主要是一些渲染节点的纹理在界面变化重新渲染的时候做了缓存等一系列的优化。
kejinlu
2020-02-06 11:32:24 +08:00
底层渲染也没有什么一次完成的说法,主要是一些渲染节点的纹理在界面变化重新渲染的时候做了缓存等一系列的优化。
KunMinX
2020-02-06 11:45:01 +08:00
@kejinlu 要说缓存的话,android 开启硬件加速也是啊 … 另外安卓也需要合成然后才渲染,图层多了,就要渲染多遍。所以 flutter 和 android 的 GUI 究竟啥本质区别
gunavy
2020-02-06 14:07:58 +08:00
个人观点,flutter 追溯的话应该叫 elm 架构,开发思路上要区别与普通的 mvc。elm 架构其实已经很多了,比如:qt quick,react,swiftUI,jetpack。elm 特点:这里拿 flutter 举例就是 widget,思维模式中一定要搞清楚 widget 不是 view,它是对 view 的状态描述,是没有生命周期的(描述可能存在歧义),当状态变的时候 widget 就会变。曾看过一本上,上面从测试的角度解释了 elm 的好处就是:当需要测试 UI 的时候,可以不依赖业务单独测试,因为 widget 中可以拿到 view 所有你想拿到的东西,widget 是 view 的状态。在 MVC 中要测试一个 UI 通常需要进行集成测试,如果要全覆盖测试需要把所有的 MVC 内容都加上去。 还要一些其它特点,需要实践体会。凡事各有优缺点,但前提一定要理解对,比如用 mvc 的思想去看 flutter,flutter 就是坨屎。
reactna1ve
2020-02-06 14:28:15 +08:00
stateful 的设计我们组之前 Android 上也用过,设计很美好,现实很骨感
老大按着 maverick 抄了一套,实际情况是首先业务方对 state 的理解可能导致 state 属性的划分变得完全不可控,随便一个小模块的 state 动不动上百个 properties,然后业务方本身对 react 的概念不理解,写成四不像

当然最后没上的原因还是因为同样和老代码相比,数据下降(
loginbygoogle
2020-02-10 09:48:37 +08:00
@murmur 🐭👀🤏🏻💡

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/642375

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX