解决Flutter boost模块化加入到原有android项目后,首次加载过慢的问题

摘要:
由于Flutterboost目前没有好的解决方案,只能进行修改。一般的想法是在应用程序打开时初始化一个不可见的Flutter页面,并让它自动注册&initialize=Null){ft.show}else{ft.add}ft.commit()}这样,每次打开应用程序时,都会在第一次初始化Flutter。

由于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了。

免责声明:文章转载自《解决Flutter boost模块化加入到原有android项目后,首次加载过慢的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python-Dataframe数据清洗之0值、缺失值、重复数据(以多列去重)、不符合累计递增趋势的异常数据(跳大值和跳小值,兼噪声值)清洗Electron 使用 Tray设置图标的路径问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浅谈前端工程化、模块化、组件化

什么是前端工程化、模块化、组件化?前端工程化 工程化是一种思想而不是某种技术(当然为了实现工程化我们会用一些技术) 再用一句通俗的话来概括前端工程化:前端工程化就是用做工程的思维看待和开发自己的项目,而不再是直接撸起袖子一个页面一个页面开写 前端模块化前端工程化是一个高层次的思想,而模块化和组件化是为工程化思想下相对较具体的开发方式,因此可以简单的认为...

flutter报错:Waiting for another flutter command to release the startup lock..

在flutter开发过程中,运行flutter命令,flutter doctor 或者flutter run等命令,如果出现Waiting for another flutter command to release the startup lock..    只要进入flutter sdk 目录,然后找到bin/cache/lockfile文件,删除后再...

flutter 如何修改返回按钮的颜色

flutter 如何修改返回按钮的颜色 如果想设置AppBar返回按钮的颜色,可以通过修改相对应主题色的方式来完成,示例代码如下: appBar: AppBar( iconTheme: IconThemeData( color: Colors.black, //修改颜色 ), title: Text("示...

Android之Activity生命周期详解

Activity的生命周期方法: onCreate()--->onStart()--->onResume()--->onPause()--->onStop()--->onDestory() 单个Activity的三种状态:显示状态,不可见状态,销毁状态。1,activity创建到显示要调用前三个方法.2,点击后退键,做了两件事...

iOS开发者账号详细介绍

前言:   做为一个iOS应用的开发者,在编码调试过程中,可以使用模拟器来完成整个过程。但是在最后提交上线App的时候,就必须要有一个苹果开发者账号。而我作为一个近乎完全自学的iOS开发者,在开发者证书上也是绕了很多圈,迷茫迷惑。在反复摸索验证的情况下。最后看透了这一切。最初一开始是在淘宝网上购买证书的,后来在公司有了自己的个人开发者账号,在个人开发者账号...

02_iOS 沙盒及各个目录详解

处于安全考虑,一个iosAPP对系统文件的交互权限被限制在app的沙盒目录下。 在安装一个新的app的时候,安装程序会在沙盒目录下创建许多的容器,每个容器目录都有特定的角色。 bundle容器目录:保存应用程序的包(主bundle的资源等) 数据容器目录:就是我们平时开发中用到的Documents,library temp。运行的时候app可以额外的申请容...