Flutter 核心渲染流程分析 [完结篇],android开发面试自我介绍

本文详细分析了Flutter的渲染流程,从scheduleFrame()开始,探讨了如何通过Native层监听Vsync信号,执行onBeginFrame和onDrawFrame。在onDrawFrame中,经历了Build、Layout和Paint三个关键步骤,构建并绘制Widget树。此外,还介绍了Flutter调度的五个状态,揭示了其高效渲染的秘密。
摘要由CSDN通过智能技术生成

方法中有两个关键点:

1、onBuildScheduled()

2、将 element 添加到 _dirtyElements 中

第二点没什么好说,后面会用到,关键先看第一点。跟踪引用,会发现第一个方法最终会执行到 SchedulerBinding.scheduleFrame(),这便是绘制的源头。


二、渲染起源:SchedulerBinding.scheduleFrame()


/// dart

/// 调用 C++ 到 Native 层,请求 Vsync 信号

void scheduleFrame() {

if (_hasScheduledFrame || !_framesEnabled)

return;

ensureFrameCallbacksRegistered();

window.scheduleFrame();

_hasScheduledFrame = true;

}

这个方法代码量并不多,关键在 window.scheduleFrame() ,这是一个 native 方法。

void scheduleFrame() native ‘Window_scheduleFrame’;

以安卓为例,最终会执行到 JNI_OnLoad 注册的 Java 接口 AsyncWaitForVsyncDelegate.asyncWaitForVsync,这个接口在 Flutter 启动时初始化。实现内容如下

new FlutterJ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值