FlutterBoost源码


一、如何实现公共引擎

组件:BoostFlutterActivity,父类直接Activity,和Flutter框架的FlutterActivity无关。
委托者:FlutterActivityAndFragmentDelegate。
视图:委托者负责提供。
在onCreate()启动方法,创建委托者,onAttach()方法,初始化引擎引用,Host提供,将组件的功能通过Host接口方式通知委托者。

FlutterBoost单例,包含一个公共引擎FlutterEngine,FlutterBoost结构。

FlutterBoost结构

Application初始化,FlutterBoost类,容器管理器,引擎,当前组件。

public void onCreate() {
    super.onCreate();
    ...
    Platform platform = new FlutterBoost
            .ConfigBuilder(this, router)
            .isDebug(true)
            .whenEngineStart(FlutterBoost.ConfigBuilder.ANY_ACTIVITY_CREATED)
            .renderMode(FlutterView.RenderMode.texture)
            .pluginsRegister(pluginsRegister)
            .build();
    FlutterBoost.instance().init(platform);
}

FlutterBoost初始化,Platform建造者配置应用级属性。设置Router,引擎初始化时机,当第一个任何Activity启动时初始化(当前设置),立即初始化,Flutter组件Activity启动时初始化。

初始化流程,doInitialFlutter()方法,创建FlutterEngine引擎,executeDartEntrypoint()方法,运行Bundle。

public FlutterEngine provideFlutterEngine(@NonNull Context context) {
    return FlutterBoost.instance().engineProvider();
}

二、生命周期

BoostFlutterActivity生命周期,委托Delegate。
onResume()方法,mSyncer同步Dart,mSyncer是容器ContainerRecord,由持委托者有的容器通知Dart层。


三、视图结构

委托者onCreateView()方法,返回组件根视图setContentView()设置。

视图结构

XFlutterView是FlutterBoost根据embedding包下的源码,重写的FlutterView,定义两种绘制视图,SurfaceView和TextureView的子类。
FlutterSplashView是FrameLayout布局,父节点。

委托者关系。

委托者关系图

组件中,容器,视图,引擎。


四、视图管理器

FlutterViewContainerManager,Flutter视图容器管理者。
IOperateSyncer,视图容器,具体对象ContainerRecord。
ContainerRecord,记录容器状态,和Dart同步方法,创建、不可见、可见,通知Dart层。
每个BoostFlutterActivity容器,一个委托者,一个ContainerRecord,
视图创建一个ContainerRecord,代表一个Boost管理的容器。

FlutterViewContainerManager管理器。

视图管理器关系

五、插件

FlutterBoostPlugin
MethodChannel,原生调用Flutter
didInitPageContainer,didShowPageContainer,didDisappearPageContainer
在生命周期容器状态改变时,通知当前容器Dart层。


任重而道远

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 一、Flutter 为何使用Dart开发语言二、Flutter的UI系统1.特点2.架构简介2.1 Flut...
    十拿九稳啦阅读 3,729评论 3 28
  • 版本记录 前言 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 ...
    刀客传奇阅读 3,139评论 1 7
  • 三国时,吴国杀了关羽,刘备怒不可遏,亲自率领七十万大军伐吴。 蜀军从长江上游顺流进击,居高临下,势...
    海宁儿阅读 459评论 0 0
  • 关于不一致性,让我印象最深的是工作坊中老师说的一段话:那些绝望的孩子,放弃自己生命的孩子,但凡能感觉到世上有一个人...
    在云端1004阅读 121评论 0 0
  • 题记:寻求公道同寻求长生不老一样,不会有任何结果。 不公正现象的存在是必然的,然而你可努力不使自己因此而陷入惰性,...
    赵月晴阅读 225评论 0 0