Flutter启动流程分析之插件化升级探索

本文深入探讨了Flutter在Android平台上的启动流程,详细介绍了FlutterActivity、FlutterEngine及FlutterLoader的工作原理,同时给出了两种热更新实现方案。

Flutter是Google推出的一款跨平台框架。与Weex等其他跨端框架不同的是,Flutter的界面布局绘制是由自己完成的,而不是转换成对应平台的原生组件。那么各个平台是如何启动它的呢?从Flutter官方提供的架构图上看,Flutter Embedder层提供了底层操作系统到Flutter的程序入口,平台采用适合当前系统特性的方式去各自实现。本文基于flutter 2.0.6版本源码,来探索Android平台上flutter Embedder层对应的启动流程,看看这个过程中做了些什么事情,有什么问题是需要我们在项目中注意的。

这部分源码位于engine源码中的/engine/shell/platform/android/ 目录下。

1.主流程

先来看看整体的流程:

Android以FlutterActivity/FlutterFragment/FlutterView的形式承载flutter界面。当我们使用AndroidStudio创建一个新的flutter工程时,生成的MainActivity是直接继承了FlutterActivity,那么很明显,主要的逻辑都在这个FlutterActivity里面了。从流程图看到,flutter的启动流程也是从FlutterActivity的onCreate方法开始的:

1.FlutterActivity将onCreate主要的操作委托给delegate对象去实现。

2.delegate中调用setupFlutterEngine创建FlutterEngine。

3.FlutterEngine初始化各种channel之后,再创建FlutterLoader去加载资源文件和apk里的打包产物,之后初始化JNI的几个线程和DartVM。

4.delegate之后再通过FlutterEngine注册各个插件。

5.FlutterActivity调用delegate的onCreateView创建FlutterView。

6.最后,onStart生命周期中通过delegate的onStart方法执行DartExecutor.executeDartEntrypoint,这个方法会在jni层执行Dart代码的入口函数。至此启动完成。

1.1.FlutterActivity

FlutterActivity也是继承的Activity,但是它把主要的功能都委托给了FlutterActivityAndFragmentDelegate类去实现,实现的Host接口主要是支持在delegate中获取FlutterActivity的一些参数,比如configureFlutterEngine,这些方法可以由子类去重写,实现自定义配置。

接下来,我们看看FlutterActivity的onCreate(),主要的两个步骤是:

1.delegate.onAttach(this): 初始化FlutterEngine、注册各个插件。(注意,这里传的this即是delegate中的host对象)

2.setContentView(createFlutterView()): 创建FlutterView并绑定到FlutterEngine。

这两个步骤都是委托给 FlutterActivityAndFragmentDelegate 去实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值