Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 484|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-6-5 14:55:05 | 显示全部楼层 |阅读模式

    由于Flutter boost目前还没有很好的解决方案,所以只能魔改了,大致的思路就是在刚打开app的时候就初始化一个不可见的Flutter页面,让其自动注册&初始化。

    先编写一个FlutterFragment

    package xxx;
    
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    
    import com.taobao.idlefish.flutterboost.containers.BoostFlutterFragment;
    
    import io.flutter.plugins.GeneratedPluginRegistrant;import java.util.HashMap;
    import java.util.Map;
    
    import io.flutter.plugin.common.PluginRegistry;
    
    public class MagicFragment extends BoostFlutterFragment {
        public MagicFragment() {
    
        }
    
        public static MagicFragment instance(String tag) {
            MagicFragment fragment = new MagicFragment();
            fragment.setTabTag(tag);
            return fragment;
        }
    
        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            return super.onCreateView(inflater, container, savedInstanceState);
        }
    
        @Override
        public void setArguments(@Nullable Bundle args) {
            if (args == null) {
                args = new Bundle();
                args.putString("tag", "");
            }
            super.setArguments(args);
        }
    
        public void setTabTag(String tag) {
            Bundle args = new Bundle();
            args.putString("tag", tag);
            super.setArguments(args);
        }
    
        @Override
        public void onRegisterPlugins(PluginRegistry registry) {
            GeneratedPluginRegistrant.registerWith(registry);
        }
    
        @Override
        public String getContainerName() {
            return "";
        }
    
        @Override
        public Map getContainerParams() {
            Map<String, String> params = new HashMap<>();
            return params;
        }
    
        @Override
        public void destroyContainer() {
    
        }
    
        @Override
        public void onContainerShown() {
            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中

    private fun 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了。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-11 22:40 , Processed in 0.060726 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表