Flutter启动流程
Flutter应用启动流程分析(一)
1、FlutterApplication
废话不说直奔应用入口FlutterApplication类:
public class FlutterApplication extends Application {
@Override
@CallSuper
public void onCreate() {
super.onCreate();
FlutterMain.startInitialization(this);
}
private Activity mCurrentActivity = null;
public Activity getCurrentActivity() {
return mCurrentActivity;
}
public void setCurrentActivity(Activity mCurrentActivity) {
this.mCurrentActivity = mCurrentActivity;
}
}
简单的不能再简单了开发应用时我们可继承此类,来看onCreate方法中调用了FlutterMain的startInitialization()进行初始化Flutter engine,属性mCurrentActivity保存了当前正在前台展示的Activity引用。
2、FlutterMain
接着往下看看FlutterMain类中都做了什么,定位到FlutterMain的startInitialization方法
public static void startInitialization(@NonNull Context applicationContext) {
if (isRunningInRobolectricTest) {
return;
}
FlutterLoader.getInstance().startInitialization(applicationContext);
}
先对isRunningInRobolectricTest变量做判断是否进行下面的初始化操作,变量值初始化为false(当前看此变量没有重新调用赋值的地方,会一直为false,以后看看在别的有没有使用到),所以一定会走到下面的代码执行。发现最终交由FlutterLoader来执行,再看别的方法也是交由FlutterLoader来执行的,好了我们知道了FlutterMain根本没有做实质性的操作,就是一个空壳子,一个静态代理类而已。看看FlutterMain的类图: