由于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. easyUI 如何不跳转页面,只是加载替换center部分内容
  2. php面向对象编程 设计模式
  3. public/private/protected访问控制权限的区别
  4. python2与python3在windows下共存
  5. 写chrome插件---一个优酷自动加粉丝助手
  6. android动画的Interpolator
  7. WPF 的datagrid 列名中没有显示下划线是怎么回事?
  8. ofbiz进击 第一节。 新建自己的webapp项目
  9. 安装 centos7 注意事项
  10. TSSAO Temporal Screen-Space Ambient Occlusion (Unity3d 5 示例实现)
  11. Spring HTTPInvoker原理猜想(HTTP+序列化)
  12. MongoDB应用介绍之前
  13. CSS实现三角形方法二--border+content
  14. Apache 80端口被占用
  15. Qt 密码框不可选中、复制、粘贴、无右键菜单等
  16. Python学习-终端字体高亮显示1
  17. websocket消息推送实现
  18. 12月22日 update_columns,完成第9节。
  19. [QT][SQLITE]学习记录一 querry 查询
  20. 邂逅Sass和Compass之Compass篇

热门文章

  1. Test Case Design Method - OATS
  2. php abs函数怎么用?
  3. C Sleepy Kaguya
  4. canvas 画正方形和圆形
  5. css文本内容大于内本显示框设置其显示方式
  6. bounds与frame的区别及setBounds的使用
  7. vue,一路走来(15)--简单投票系统
  8. 广义Fibonacci数列找循环节 学习笔记
  9. rabbitmq必须应答
  10. CSS实现三级菜单[转]