由于Flutter boost目前还没有很好的解决方案,所以只能魔改了,大致的思路就是在刚打开app的时候就初始化一个不可见的Flutter页面,让其自动注册&初始化。
先编写一个FlutterFragment
packagexxx; importandroid.os.Bundle; importandroid.view.LayoutInflater; importandroid.view.View; importandroid.view.ViewGroup; importandroidx.annotation.NonNull; importandroidx.annotation.Nullable; importcom.taobao.idlefish.flutterboost.containers.BoostFlutterFragment; importio.flutter.plugins.GeneratedPluginRegistrant;importjava.util.HashMap; importjava.util.Map; importio.flutter.plugin.common.PluginRegistry; public class MagicFragment extendsBoostFlutterFragment { publicMagicFragment() { } public staticMagicFragment instance(String tag) { MagicFragment fragment = newMagicFragment(); fragment.setTabTag(tag); returnfragment; } @Override public voidonViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } @Override publicView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return super.onCreateView(inflater, container, savedInstanceState); } @Override public voidsetArguments(@Nullable Bundle args) { if (args == null) { args = newBundle(); args.putString("tag", ""); } super.setArguments(args); } public voidsetTabTag(String tag) { Bundle args = newBundle(); args.putString("tag", tag); super.setArguments(args); } @Override public voidonRegisterPlugins(PluginRegistry registry) { GeneratedPluginRegistrant.registerWith(registry); } @Override publicString getContainerName() { return""; } @Override publicMap getContainerParams() { Map<String, String> params = new HashMap<>(); returnparams; } @Override public voiddestroyContainer() { } @Override public voidonContainerShown() { super.onContainerShown(); } }
然后在应用的第一个页面的Activity中加入一个不可见的FrameLayout
<FrameLayout android:id="@+id/magic" android:layout_width="1dp" android:layout_height="1dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"></FrameLayout>
然后在应用的第一个页面的Activity中加入一个方法,把这个Fragment加入到这个Activity中
privatefun addMagicFragment() { var time: Long =System.currentTimeMillis() val instance = instance("magic") val fm =supportFragmentManager val ft =fm.beginTransaction() val cacheFragment = fm.findFragmentByTag("magic") if (cacheFragment != null) { ft.show(cacheFragment) } else{ ft.add(R.id.magic, instance) } ft.commit() }
这样每次打开app就会第一时间去初始化Flutter了。