抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

“浅谈” Flutter 应用落地心得

2019 年 11 月 30 日

“浅谈” Flutter 应用落地心得

继北京站 RTC Dev Meetup 技术沙龙的火爆之后,3 月 30 日「RTC 开发者社区」在上海圆满举行了又一场技术沙龙。这次社区邀请到了四位演讲人分享 Flutter 开发经验,他们分别来自字节跳动、声网,以及另外两家知名公司。


郑宜东:如何优雅地 Flutter

郑宜东表示,Flutter 目前的社区热度很高。他在演讲中对比了 React Native 与 Flutter 的架构。然后分析了他所在的团队在利用 Flutter 开发 iOS、Android App 过程中的思考与经验。



郑宜东从社区角度来看。与 React Native 相比,Flutter 虽是后来者,但在 Github 数据上可以看到 Flutter 受到广泛关注,并且更新、迭代速度很快。在掘金社区中,尽管关注 Flutter 的人不如 React Native 多,但社区内容量却已经超过了它。这说明 Flutter 已经获得了大多数的认可。


另一方面,Flutter 2019 年的 Roadmap 中有很多项任务,其中比较重要的三条:


第一,Ease of Adoption,即接入现有项目。这是 Flutter 2019 年的重点。在 2018 年 11 月,Flutter 做了一次更新,模块化、类似于 Android 的项目管理方式,能更易于让原生开发者体验 Flutter。


第二,支持更多平台。这是此前一直被诟病一点。说 Flutter 只支持 iOS 和 Android,其实并不准确。目前,Flutter 的规划里不仅有 iOS、Android,还有 Windows,甚至包括未来谷歌的新系统。


第三,Dynamic updates。在 iOS 方面不会去支持它。


郑宜东随后分享了他们在现有 App 中接入 Flutter 时的思考与经验,包括渲染、持续集成等方面,并详解了其中的架构设计。


张乾泽:Flutter 实时音视频技术实践

声网 Agora 高级架构师张乾泽在上海站分享了在 Flutter 上的实时音视频技术实践。他总结了调研、开发 Flutter 音视频连麦插件过程中的 Flutter 渲染架构、视频渲染方法等经验。


首先,他介绍了一下 Flutter 的架构逻辑。如果比较熟悉 Flutter 的朋友可能知道,Flutter 的渲染方式与 React Native 最不一样的地方就是它自己的一些原生控件上没有利用系统本身提供的一些接口、控件,比如说 UI View 或 Android 上的一些 View。它自己里面会建立一个 Layer Tree,Flutter 自己来进行渲染,它把这些数据或者渲染结果发到 Skia,由 Skia 引擎渲染处理为 GPU 数据,最后通过 GL 或 Vulkan 发给 GPU。



图:Flutter 渲染机制


当我们在实现一个视频通话应用的时候,我们可以利用 Flutter 自身组件来实现很多基本的功能,比如 App 的一个脚手架,还有利用组件来画出界面上的按钮、菜单栏。而视频的编解码、实时传输我们可以交给 Agora SDK 来解决。那么关键的问题在于如何在 Flutter 上渲染视频。


在 Flutter 里有一个组件叫 Video Player,其中有一个 Texture Widget,我们可以通过 Native 端来提供视频数据给这个 Texture,然后通过它来进行渲染。以 iOS 为例,iOS 需要提供 CVPixelBufferRef,它可以将渲染出来的数据供给 Texture Widget,然后 Texture Widget 就可以把你提供的这些数据显示出来。在我们传输数据的时候会需要将其与 TextureID 绑定,这样一来,可以在同一个界面上出现多个 Texture,也就是说能显示多个视频通话窗口。在其中,声网 SDK 的 AgoraVideoSink 接口里可以提供一个回调,这个回调会把它收到的所有视频数据通过你想要的格式传给 Texture。



图:iOS 的渲染


在 Flutter 1.0 中新增的 PlatformView 也可以实现这个场景。PlatformView 在 iOS 和 Android 上分别叫做 UIKitView 和 AndroidView,它可以让你直接创建一个 UIView。我们在 Plugin 中有一个 ViewFactory,它可以针对不同平台返回一个你需要的 View。最后,在一个分辨率设置较低的状态下进行了视频通话,分别对比了两种实现方法的性能。结果显示 PlatformView 的性能消耗跟直接用 Native 接我们 SDK 的性能比较相近。



符磊:浅谈 Flutter 开发心得

Flutter 有两种状态控件:StatelessWidget、StatefulWidget,当我们的 UI 复杂、数据变化较多的时候,如何管理 Widget 就成了一个问题。字节跳动 iOS 工程师符磊总结了此前 Flutter 落地项目中得出的 Widget 数据管理、Widget 的渲染优势、异步编程方面的经验。在渲染方面,与前两位演讲人的内容不同,他深入讲解了整体渲染的更新。



上图是 Flutter 的 Render Pipeline,在触发 Layout 后进行组件合成和数据管理进行布局,布局之后进行 Paint,这还不是 GPU 阶段的渲染,而是对所有数据的整合。Flutter 的 UI Render 渲染流程如下图所示。如果有一个 State 做出了变更,进行绘制,这样将会浪费非常非常多的资源进行整体的重回过程。这其中就要涉及到如何进行优化的问题。



符磊在演讲中详细讲解了 Flutter 的异步编程、多线程等方面的经验。


卢召韦:解读 Flutter 插件

资深 Android 开发工程师卢召韦,曾在华为任研发工程师,也是社区上活跃的 Flutter 开发者。他在演讲中分享 Flutter 插件的编写。编写 Flutter 的插件有几个重要步骤:


1.创建 MethodChannel 对象,注意要固定唯一的通信字段。


2.Android 端接收信息并做出相应的处理,这里面需要注意的是 Method Channel Handler、Method Call 以及 Result。


3.第三就是 Dart 代码获取原生平台封装的相关函数,这里重点我们一般都是通过异步获取相关的 API。


4.工程代码里面调用插件里的代码。


在演讲中,他还分享了 Flutter 与原生交互的过程,以及在开发 Flutter 插件过程中需要注意的六大问题。


本文转载自公众号声网 Agora(ID:shengwang-agora)。


原文链接:


https://mp.weixin.qq.com/s/X3zDFKVkBxNd2lzM8jxoHQ


2019 年 11 月 30 日 13:52565

评论

发布
暂无评论
发现更多内容

第一章 认识产品经理(上)

郭栋

产品经理训练营

nodejs中的文件系统

程序那些事

nodejs 文件系统 异步IO 异步编程 程序那些事

作业-第13周

arcyao

单例模式作业

MR.X

精选算法面试-哈希表II

李孟

面试 算法 28天写作

企业需要DevSecOps来保证应用程序的安全

啸天

安全 DevSecOps 应用安全

币币撮合交易系统软件开发|币币撮合交易APP开发

开發I852946OIIO

系统开发

第一周-胡赵凯-总结

hisun胡

产品经理训练营

架构师训练营 week13 课后作业

花果山

读书笔记之互联网金融思考一则

石君

金融科技 互联网金融 28天写作

有道乐读 x AWS | 云上的少儿图书馆!这个寒假让孩子爱上“乐读”

亚马逊云科技 (Amazon Web Services)

云计算 AWS

第一周-胡赵凯-作业

hisun胡

产品经理训练营

架构师训练营 week13 学习笔记

花果山

敏捷开发需要内外兼修

Bruce Talk

敏捷开发 Agile

产品经理训练营课后作业-第一周-认识产品经理

.nil?

产品经理训练营

程序员行业半衰期太短,如何保持高效发展?

李忠良

28天写作

数字货币合约交易系统软件开发|数字货币合约交易APP开发

开發I852946OIIO

系统开发

Flink1.12集成Hive打造自己的批流一体数仓

王知无

大数据 flink

道德困境 - 电车难题

石云升

28天写作 道德困境 电车难题

怎样更好地阅读源码?

程序员架构进阶

方法论 开发 源码阅读 提升自我 28天写作

在 AWS 的视角下,正确打开零信任安全模型

亚马逊云科技 (Amazon Web Services)

云计算 AWS

前端也要懂机器学习(下)

执鸢者

机器学习 前端

案例研究之聊聊 QLExpress 源码 (八-2)

小诚信驿站

聊聊架构 28天写作 QLExpress源码 聊聊源码

数字货币交易APP系统开发|数字货币交易软件开发

开發I852946OIIO

系统开发

AWS Graviton2 | 匠“芯”定制,性能为王

亚马逊云科技 (Amazon Web Services)

云计算 AWS

ClickHouse在大数据领域企业级应用实践和探索总结

王知无

大数据 Clickhouse

产品经理岗位调研

发条檀木

产品经理训练营

STM32通过rosserial接入ROS通讯开发

良知犹存

stm32 ROS

高并发场景下如何优化服务器的性能?

冰河

Linux 并发编程 高并发 服务器 性能调优

构师训练营 - 第十三周课后练习

joshuamai

给自己当前岗位所定义的理想岗位模型

邹小胖

自我思考

Study Go: From Zero to Hero

Study Go: From Zero to Hero

“浅谈” Flutter 应用落地心得-InfoQ