Flutter在Android端,将引擎运行需要的和上层业务逻辑添加的资源文件都放到了assets目录下。
Flutter 引擎在构造的过程中,会在java层取得assetManger对象:
FlutterActivity.java:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
switchLaunchThemeForNormalTheme();
super.onCreate(savedInstanceState);
delegate = new FlutterActivityAndFragmentDelegate(this);
//会调用到FlutterActivityAndFragmentDelegate类中去,并设置flutter引擎
delegate.onAttach(this);
delegate.onRestoreInstanceState(savedInstanceState);
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
configureWindowForTransparency();
setContentView(createFlutterView());
configureStatusBarForFullscreenFlutterExperience();
}
FlutterActivityAndFragmentDelegate.java:
void onAttach(@NonNull Context context) {
ensureAlive();
//当实例存在时,FlutterEngine将不受配置更改的影响。 所以只在实例不存在的情况下会去创建一个新的。
if (flutterEngine == null) {
setupFlutterEngine();
}
if (host.shouldAttachEngineToActivity()) {
Log.v(TAG, "Attaching FlutterEngine to the Activity that owns this delegate.");
flutterEngine.getActivityControlSurface().attachToActivity(this, host.getLifecycle());
}
platformPlugin = host.providePlatformPlugin(host.getActivity(), flutterEngine);
host.configureFlutterEngine(flutterEngine);
isAttached = true;
}
void setupFlutterEngine() {
...