Flutter应用启动流程分析(三)

Flutter应用启动流程分析(三)

在创建FlutterView时首先创建了FlutterNativeView,这里先看看FlutterNativeView是怎么创建的;
FlutterNativeView实现了BinaryMeeenger接口,下面看一下都有哪些属性

    private final FlutterPluginRegistry mPluginRegistry;
    private final DartExecutor dartExecutor;
    private FlutterView mFlutterView;
    private final FlutterJNI mFlutterJNI;
    private final Context mContext;
    private boolean applicationIsRunning;

FlutterPluginRegistry:实现了PluginRegistry的全部接口,管理Plugin的注册与注销的类。
DartExecutor:平台层与dart层交互执行类, 实现了平台向dart调用, dart向平台的响应功能.
FlutterView:这里保存的引用,主要是将底层的渲染与执行周期状态通知给FlutterView。
FlutterJNI:这个类是调用底层本地方法的, JNI的调用都在这里。

接着看构造方法

    public FlutterNativeView(@NonNull Context context, boolean isBackgroundView) {
   
        mContext = context;
        mPluginRegistry = new FlutterPluginRegistry(this, context);
        mFlutterJNI = new FlutterJNI();
        mFlutterJNI.addIsDisplayingFlutterUiListener(flutterUiDisplayListener);
        this.dartExecutor = new DartExecutor(mFlutterJNI, context.getAssets());
        mFlutterJNI.addEngineLifecycleListener(new EngineLifecycleListenerImpl());
        attach(this, isBackgroundView);
        assertAttached();
    }

首先对mPluginRegistry、mFlutterJNI、dartExecutor进行了创建初始化,然后将两个回调事件设置给FlutterJNI的两个成员变量。Flutter engine在Surface执行渲染操作(渲染第一帧,停止渲染)和Flutter engine的生命周期变化会调用到FlutterJNI的相关方法,然后可通知设置的事件监听成员变量执行回调。

然后调用了attach方法

  private void attach(FlutterNativeView view, boolean isBackgroundView) {
   
        mFlutterJNI.attachToNative(isBackgroundView);
        dartExecutor.onAttachedToJNI();
    }

调用FlutterJNI的方法,最终调用了native的方法获得了一个nativePlatformViewId的底层指针引用。将FlutterJNI和Flutter native engine互相关联在一起进行双向通讯。
调用DartExecutor的onAttachedToJNI方法

  public void onAttachedToJNI() {
   
    Log.v(TAG, "Attached to JNI. Registering the platform message handler for this Dart execution context.");
    flutterJNI.setPlatformMessageHandler(dartMessenger);
  }

也是调用了FlutterJNI方法,设置DartMessenger给FlutterJNI的成员变量platformMessageHandler,通过此回调来响应Flutter native engine发过来的消息,最终交给DartMessenger来处理。DartMessenger是DartExecutor的成员变量,下边看看DartExecutor

DartExecutor
平台层与dart层交互执行类, 实现了BinaryMessenger接口,执行平台层向dart调用, dart向平台的响应功能.

  public DartExecutor(@NonNull FlutterJNI flutterJNI, @NonNull AssetManager assetManager) {
   
    this.flutterJNI = flutterJNI;
    this.assetManager = assetManager;
    this.dartMessenger = new DartMessenger(flutterJNI);
    dartMessenger.setMessageHandler("flutter/isolate", isolateChannelMessageHandler)<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值