Flutter 引擎启动流程

nch ,通过一系列的调用以后,最终会调用 DartIsolate::RunFromLibrary,这个函数中会调用 InvokeMainEntrypoint 函数完成对 Dart main 函数的调用,由此进入 Flutter 的领域。Flutter 先创建好自身运营所需的环境以后,便经过与 C++ 互相调用的方法,利用 C++ 做为与 native 的中介,获取 native 上的一些服务,具体到 Android 上的话,就是 Choreographer 、TouchEvent 等,另外,画面的绘制等工做,也会交给 C++ 完成,还有能够为 Flutter 提供更多 native 功能的插件,为其提供服务 MethodChannel ,只是一种封装java

GeneratedPluginRegistrant.registerWith(PluginRegistry)

这个方法会在 FlutterActivity 的 onCreate 方法中调用,GeneratedPluginRegistrant 是自动生成的一个类,用于注册全部在 pubspec.yaml 中声明的 Flutter 插件,好比 shared_preference 插件,生成的类就是这样的:markdown

public static void registerWith(PluginRegistry registry) {
  if (alreadyRegisteredWith(registry)) {
    return;
  }
  SharedPreferencesPlugin.registerWith(registry.registrarFor("io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin"));
}

private static boolean alreadyRegisteredWith(PluginRegistry registry) {
  final String key = GeneratedPluginRegistrant.class.getCanonicalName();
  if (registry.hasPlugin(key)) {
    return true;
  }
  registry.registrarFor(key);
  return false;
}
复制代码

先判断是否已经注册过插件,而后执行插件的 registerWith 方法,这个方法将由插件实现,这也是插件必须实现的一个方法。函数

相关文章
相关标签/搜索