zoukankan      html  css  js  c++  java
  • 解决Flutter boost模块化加入到原有android项目后,首次加载过慢的问题

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

  • 相关阅读:
    POJ 2892 Tunnel Warfare(树状数组+二分)
    POJ 2886 Who Gets the Most Candies?(树状数组+二分)
    POJ 2492 A Bug's Life(并查集)
    POJ 1182 食物链(并查集)
    POJ 1703 Find them, Catch them(种类并查集)
    TC SRM 582 DIV 2
    函数
    shell进阶--流程
    计划任务 at,cron
    kill命令
  • 原文地址:https://www.cnblogs.com/xirtam/p/11467014.html
Copyright © 2011-2022 走看看