一、如何实现公共引擎
组件:BoostFlutterActivity,父类直接Activity,和Flutter框架的FlutterActivity无关。
委托者:FlutterActivityAndFragmentDelegate。
视图:委托者负责提供。
在onCreate()启动方法,创建委托者,onAttach()方法,初始化引擎引用,Host提供,将组件的功能通过Host接口方式通知委托者。
FlutterBoost单例,包含一个公共引擎FlutterEngine,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层。
任重而道远
网友评论