• 请不要在回答技术问题时复制粘贴 AI 生成的内容
KunMinX
V2EX  ›  程序员

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

  •  
  •   KunMinX · Feb 5, 2020 · 4271 views
    This topic created in 2311 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

    Supplement 1  ·  Feb 6, 2020
    找到了一个线索,是热重载。新视图系统下 state 的设计,让热重载成为可能,从而能够解决 android 哪怕视图的一个微小改动都要重新编译数十秒。

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

    因为这三者都在抄 react
    carpediemvv
        7
    carpediemvv  
       Feb 6, 2020 via iPhone
    技术都是相同的,就像语言一样,慢慢都有同一套东西,只不过是写法不同。
    kejinlu
        8
    kejinlu  
       Feb 6, 2020
    大 app 别轻易尝试 flutter,目前好多东西还不成熟。
    kejinlu
        9
    kejinlu  
       Feb 6, 2020
    flutter 底层渲染其他也没有什么一次完成的说法,主要是一些渲染节点的纹理在界面变化重新渲染的时候做了缓存等一系列的优化。
    kejinlu
        10
    kejinlu  
       Feb 6, 2020
    底层渲染也没有什么一次完成的说法,主要是一些渲染节点的纹理在界面变化重新渲染的时候做了缓存等一系列的优化。
    KunMinX
        11
    KunMinX  
    OP
       Feb 6, 2020
    @kejinlu 要说缓存的话,android 开启硬件加速也是啊 … 另外安卓也需要合成然后才渲染,图层多了,就要渲染多遍。所以 flutter 和 android 的 GUI 究竟啥本质区别
    gunavy
        12
    gunavy  
       Feb 6, 2020   ❤️ 1
    个人观点,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
        13
    reactna1ve  
       Feb 6, 2020
    stateful 的设计我们组之前 Android 上也用过,设计很美好,现实很骨感
    老大按着 maverick 抄了一套,实际情况是首先业务方对 state 的理解可能导致 state 属性的划分变得完全不可控,随便一个小模块的 state 动不动上百个 properties,然后业务方本身对 react 的概念不理解,写成四不像

    当然最后没上的原因还是因为同样和老代码相比,数据下降(
    loginbygoogle
        14
    loginbygoogle  
       Feb 10, 2020 via iPhone
    @murmur 🐭👀🤏🏻💡
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3017 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 15:09 · PVG 23:09 · LAX 08:09 · JFK 11:09
    ♥ Do have faith in what you're doing.