IT评测·应用市场-qidao123.com

标题: Android技能整理:一文秒懂Flutter跨平台演进及架构 [打印本页]

作者: 诗林    时间: 2024-8-26 03:18
标题: Android技能整理:一文秒懂Flutter跨平台演进及架构
3. Flutter引擎启动
既然了解了Flutter的编译产物,那你或许又好奇,Flutter这台引擎如何发动的,怎么跟Native衔接呢?

这里以Android为例,熟悉Android的开发者,应该都了解APP启动过程,会执行Application和Activity的onCreate()方法,FlutterApplication和FlutterActivity的onCreate()方法正是毗连Native和Flutter的枢纽。

Flutter引擎启动中会创建有4个TaskRunner以及创建捏造机,分别来看看它们的工作原理。
4. TaskRunner工作原理
Flutter引擎启动过程,会创建UI/GPU/IO这3个线程,会为这些线程依次创建MessageLoop对象,启动后处于epoll_wait等候状态。对于Flutter的消息机制跟Android原生的消息机制有很多相似之处,都有消息(大概使命)、消息队列(或使命队列)以及Looper;有一点差异的是Android有一个Handler类,用于发送消息以及执行回调方法,相对应Flutter中有着相近功能的便是TaskRunner。

上图是从源码中提炼而来的使命处置处罚流程,比官方流程图更容易理解一些复杂流程的时序问题,后续会专门解说个中起因。Flutter的使命队列处置处罚机制跟Android的消息队列处置处罚相通,只不外Flutter分为Task和MicroTask两种范例,引擎和Dart捏造机的事件以及Future都属于Task,Dart层执行scheduleMicrotask()所产生的属于Microtask。
每次Flutter引擎在消费使命时调用FlushTasks()方法,遍历整个延迟使命队列delayed_tasks_,将已到期的使命参加task队列,然后开始处置处罚使命。

可简单理解为先处置处罚完全部的Microtask,然后再处置处罚Task。由于scheduleMicrotask()方法的调用自身就处于一个Task,执行完当前的task,也就意味着马上执行该Microtask。
了解了其工作机制,再来看看这4个Task Runner的详细工作内容。

5. Dart捏造机工作
Flutter引擎启动会创建Dart捏造机以及Root Isolate。DartVM自身也拥有自己的Isolate,完全由捏造机自己管理的,Flutter引擎也无法直接访问。Dart的UI相关操作,是由Root Isolate通过Dart的C++调用,大概是发送消息通知的方式,将UI渲染相关的使命提交到UIRunner执行,这样就可以跟Flutter引擎相关模块举行交互。
何为Isolate,从字面上理解是“隔离”,isolate之间是逻辑隔离的。Isolate中的代码也是按顺序执行,由于Dart没有共享内存的并发,没有竞争的可能性,故不必要加锁,也没有死锁风险。对于Dart程序的并发则必要依靠多个isolate来实现。

图解:

6. Widget架构概览
Flutter引擎启动后执行Dart业务,是通过runApp(Widget app)方法,那Widget又是什么呢?

Widget是全部Flutter应用程序的基石,Widget可以是一个按钮,一种字体大概颜色,一个结构属性等,在Flutter的UI世界可谓是“万物皆Widget”。常见的Widget子类为StatelessWidget(无状态)和StatefulWidget(有状态);

三棵树

图解:

可见,开发者通过Widget配置,Framework通过比对Widget配置来更新Element,末了调度RenderObject Tree完成结构分列和绘制。
7. 渲染原理
Dart的UI接纳Widget来实现,最终转换为RenderObject,那界面又是如何渲染的呢?

渲染过程,UI线程完成结构、绘制操作,天生Layer Tree;GPU线程执行合成并光栅化后交给GPU来处置处罚,此中几个关键步调:

GPU线程通过skia向GPU硬件绘制一帧的数据,GPU将帧信息生存到FrameBuffer内里,然后视频控制器会根据VSync信号从FrameBuffer取帧数据传递给显示器,从而显示出最终的画面。
8. Platform Channels
Flutter框架提供了UI的控件支持,对于APP除了UI另有其他依靠于Native平台的支持,比如调用Camera的功能,该怎么办呢?为此,Flutter通过提供Platform Channel的功能,使得Dart代码具备与Native交互的本领。

Platform Channel用于Flutter与Native之间的消息传递,整个过程的消息与相应是异步执行,不会壅闭用户界面。Flutter引擎框架已完成桥接的通道,这样开发者只需在Native层编写定制的Android/iOS代码,即可在Dart代码中直接调用,这也就是Flutter Plugin插件的一种形式。
三、Flutter源码解读

笔者(Gityuan)之前一直从事于Android操作系统底层研发工作,今年刚打仗Flutter,Flutter作为一门全新的跨平台技能框架,不断穷究会发现这是一个小型系统,涉及到的技能很广:

这些疑问在前面都逐一扼要解答,如果仅仅是用Flutter做业务开发,并不必要把握这么深度技能,不外,知其然知其所以然,能让你游刃有余。
本文同步在我的公号《跨平台技能演进及Flutter未来》,别的为各人创建了Flutter微信交流群,想参加可添加Gityuan微信挚友,备注flutter即可,如发现任何文章有问题欢迎各人直接跟我反馈。
启动篇

通信篇

渲染篇

后续笔者将连续研究与梳理Flutter内部机制的文章。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到如今。
深知大多数初中级安卓工程师,想要提升技能,往往是自己探索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技能停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给各人,初衷也很简单,就是渴望能够帮助到想自学提升又不知道该从何学起的朋侪,同时减轻各人的负担。




由于文件比较大,这里只是将部门目录截图出来,每个节点内里都包罗大厂面经、学习笔记、源码讲义、实战项目、解说视频
如果你以为这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)

末了

针对Android程序员,我这边给各人整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技能;渴望能帮助到各人,也节省各人在网上搜索资料的时间来学习,也可以分享动态给身边挚友一起学习!

资料领取:点赞+点击GitHub免费获取

   往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技能,群内另有技能大牛一起讨论交流解决问题。
  +点击GitHub免费获取**
   往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技能,群内另有技能大牛一起讨论交流解决问题。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4