nch ,通過一系列的調用以後,最終會調用 DartIsolate::RunFromLibrary,這個函數中會調用 InvokeMainEntrypoint 函數完成對 Dart main 函數的調用,由此進入 Flutter 的領域。Flutter 先創建好自身運營所需的環境以後,便經過與 C++ 互相調用的方法,利用 C++ 做爲與 native 的中介,獲取 native 上的一些服務,具體到 Android 上的話,就是 Choreographer 、TouchEvent 等,另外,畫面的繪製等工做,也會交給 C++ 完成,還有能夠爲 Flutter 提供更多 native 功能的插件,爲其提供服務 MethodChannel ,只是一種封裝java
這個方法會在 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 方法,這個方法將由插件實現,這也是插件必須實現的一個方法。函數