Flutter架构——线程模型

Flutter的架构包括框架、引擎和嵌入器层,其中嵌入器负责平台引擎的移植。引擎中有多个TaskRunner,如PlatformTaskRunner处理平台交互,UITaskRunner处理Dart代码和渲染,GPUTaskRunner执行GPU相关任务,而IOTaskRunner辅助处理I/O操作。长时间阻塞任何TaskRunner都可能导致应用卡顿。

Flutter的架构分为框架、引擎和嵌入器层(Embedder),其中嵌入器层将Flutter嵌入各个平台。Flutter完整的架构图如下:
在这里插入图片描述
Flutter中的隔离是通过引擎层的一个线程来实现的,但是Flutter引擎线程的创建与管理又是由嵌入器负责的,也就是说嵌入器是平台引擎移植的中间代码。Flutter的引擎的运行架构图如下:
在这里插入图片描述
嵌入器中存在4个Runner,每个引擎各自对应一个UI Task Runner、GPU Task Runner、IO Task Runner,但是所有引擎共享一个Platform Runner.

  • Platform Task Runner
    Platform Task Runner 是 Flutter引擎的主Task Runner,因为平台的API只能在主线程中被调用,所以它对应Android上的主线程。Platform Task Runner 不仅可以处理Native平台的交互,还能与Flutter引擎交互。在创建每一个Flutter引擎的时候,都会创建一个Platform线程,供Platform Task Runner使用,即使Platform线程阻塞,也不会直接导致Flutter应用的卡顿。即便如此,也不建议在Platform Task Runner中执行耗时的操作,长时间卡住还是有可能会被系统强制杀死的。
  • UI Task Runner
    UI Task Runner 主要处理来自Dart Root isolate的代码、告诉Flutter引擎最终的渲染、Native Plugins的消息、timers(延时任务)、microtasks(微任务)以及异步的I/O操作、file handles等。
  • GPU Task Runner
    GPU Task Runner被用于执行与设备GPU相关的调用。GPU Task Runner运行的线程对应平台的子线程,并且和UI Task Runner运行在不同的线程上。如果GPU Task Runner耗时太久,同样会造成Flutter应用的卡顿。所以在GPU Task Runner中,不能执行耗时操作。
  • IO Task Runner
    IO Task Runner运行的线程也是对应平台的子线程。在Flutter开发中,当UI Task Runner和GPU Task Runner都出现过载时,就需要使用IO Task Runner执行一些预处理的读取操作,再上报给GPU Task Runner。因为只有GPU Task Runner才能接触到GPU,所以IO Task Runner相当于GPU Task Runner的助手。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值