前言
版本:Flutter 1.20.4 stable
这个系列主要讲解在Flutter的项目中,Android 从启动到加载Flutter等一系列的过程。
本文主要是对FlutterApplication的startInitialization方法及FlutterActivity整个类源码的分析
Application
<application
android:name="io.flutter.app.FlutterApplication"
android:label="flutter_channel"
android:icon="@mipmap/ic_launcher">
public class FlutterApplication extends Application {
@Override
@CallSuper
public void onCreate() {
super.onCreate();
FlutterMain.startInitialization(this);
}
}
在Android项目的AndroidManifest.xml中指定了application为FlutterApplication,主要是一个初始化操作
最终会调用FlutterLoader类中的startInitialization方法
public void startInitialization(@NonNull Context applicationContext, @NonNull Settings settings) {
if (this.settings != null) {
return;
}
if (Looper.myLooper() != Looper.getMainLooper()) {
throw new IllegalStateException("startInitialization must be called on the main thread");
}
applicationContext = applicationContext.getApplicationContext();
this.settings = settings;
long initStartTimestampMillis = SystemClock.uptimeMillis();
initConfig(applicationContext);
initResources(applicationContext);
System.loadLibrary("flutter");
VsyncWaiter.getInstance(
(WindowManager) applicationContext.getSystemService(Context.WINDOW_SERVICE))
.init();
long initTimeMillis = SystemClock.uptimeMillis() - initStartTimestampMillis;
FlutterJNI.nativeRecordStartTimestamp(initTimeMillis);
}
- 加载Flutter引擎的本机库以启用后续的JNI调用
- 开始定位和打开应用程序APK中打包的Dart资源
FlutterApplication不 做过多分析,就是一些资源的初始化和so库加载的一些操作
FlutterActivity
class MainActivity : FlutterActivity(){}
public class FlutterActivity extends Activity
implements FlutterActivityAndFragmentDelegate.Host, LifecycleO