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 方法,這個方法將由插件實現,這也是插件必須實現的一個方法。函數

相關文章
相關標籤/搜索