1、6FlutterActivityAndFragmentDelegate.onStart调用doInitialFlutterViewRun来初始化Flutter实现的View
2、16DartIsolate::RunFromLibrary获取dart入口函数,使用Dart_GetField获取入口函数,调用InvokeMainEntrypoint执行dart虚拟机。
3、7FlutterActivityAndFragmentDelegate.doInitialFlutterViewRun根据配置寻找dart入口点,主要是dart的文件路径和入口函数。然后将入口信息封装到DartEntrypoint,调用executeDartEntrypoint执行dart。
4、8executeDartEntrypoint调用flutterJNI.runBundleAndSnapshotFromLibrary执行dart入口函数。
5、14RuntimeController::LaunchRootIsolate调用DartIsolate::CreateRunningRootIsolate执行dart虚拟机
6、1MainActivity这个MainActivity什么逻辑都没有,只是继承了FlutterActivity,这个FlutterActivity的源码在Flutterengine的仓库里。我们来看一下Activity的onCreate和onStart里做的事~
7、13Engine::Run调用runtime_controller_->LaunchRootIsolate
8、3FlutterActivity.createFlutterView调用了delegate的onCreateView构造FlutterView
9、5FlutterActivity.onStart调用FlutterActivityAndFragmentDelegate.onStart
10、2FlutterActivity.onCreateonCreate中构造了FlutterActivityAndFragmentDelegate,用于逻辑解耦,逻辑都在这个类里,然后调用onAttach,onAttach里构造了FlutterEngine,FlutterEngine里面包含了FlutterJNI,DartExecutor等,FlutterEngine核心逻辑都是C++写的,这里就是通过JNI绑定Native真实的实现。
11、9FlutterJNI.runBundleAndSnapshotFromLibrary调用native函数,到C++层。
12、17InvokeMainEntrypoint调用DartInvokeField来调用Dart的方法,Dart_LookupLibrary和DartInvokeField都是dartsdk提供的接口。这里之后就到了main.dart进入dart入口。
13、12Shell::RunEngine通过engine->Run调用dart代码,这里RunEngine我们省略了一个重载函数,就是result_callback为null。result_callback是用于dart执行完成之后回调使用的。
14、10RunBundleAndSnapshotFromLibraryjni调用到C++层。
15、15DartIsolate::CreateRunningRootIsolate做了一些检查后,处理和配置了dart虚拟机创建和销毁回调,然后调用RunFromLibrary执行dart。
16、11AndroidShellHolder::Launch将dart入口函数信息封装到BuildRunConfiguration,然后调用RunEngine来执行。
17、4FlutterActivityAndFragmentDelegate.onCreateViewAndroid有两种渲染View,一种是基于TextureView的,一种是基于SurfaceView的,FlutterView继承了FrameLayout,然后会将这里的SurfaceView/TextureView添加到FlutterView中,后续的绘制都是在这个上面,我们来看SurfaceView的流程。onCreate创建完FlutterView之后,我们接着看ActivityonStart的流程。