登录 注册写文章
首页下载APP
静默加载 关注赞赏支持
振兴书城 2人点赞 Flutter
静默加载 拥有110钻 (约13.03元) 关注 "小礼物走一走,来简书关注我" 赞赏
广告
静默加载关注 拥有110钻 (约13.03元) Java版的7种单例模式 阅读 8 Dart和Java通信源码分析和实践 阅读 86 从JNI_OnLoad看so的加载 阅读
59
日本最省女孩15年买3栋豪宅:比赚钱更重要的,是做好这3件事 阅读 22986
广告
评论1 赞2 2赞3赞 赞赏
Flutter混合开发:启动黑屏处理
静默加载 关注赞赏支持
Flutter混合开发:启动黑屏处理
0.579 字数 213阅读 348上一篇 Flutter混合开发:Android接入Flutter 我们讲到在 Flutter混合开发 中主要有、有 addView (页面局部Flutter) 和 setContentView (整个页面Flutter)两种方式。这两种方式在启动页面的时候都会遇到 FlutterView 出现黑屏的情况。
解决思路
延迟 FlutterView 的加载时间。
setContentView
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
View flutterView = Flutter.createView(MainActivity.this, getLifecycle(), "root1");
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
setContentView(flutterView, layout);
}
}
这中方式目前没有找到一种很好的方式推迟 FlutterView 的加载时间。
addView
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout frameLayout = findViewById(R.id.flutter_root);
View flutterView = Flutter.createView(MainActivity.this, getLifecycle(), "root1");
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
frameLayout.addView(flutterView, layout);
}
}
这种情况我们可以使用多种方式进行 FlutterView 加载的延迟。
检测FlutterView的第一帧
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout frameLayout = findViewById(R.id.flutter_root);
frameLayout.setVisibility(View.INVISIBLE);
FlutterView flutterView = Flutter.createView(MainActivity.this, getLifecycle(), "root");
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
FlutterView.FirstFrameListener listeners = () -> frameLayout.setVisibility(View.VISIBLE);
flutterView.addFirstFrameListener(listeners);
frameLayout.addView(flutterView, layout);
}
}
在View的post方法中延迟执行FlutterView的添加
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout frameLayout = findViewById(R.id.flutter_root);
FlutterView flutterView = Flutter.createView(MainActivity.this, getLifecycle(), "root");
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
getWindow().getDecorView().post(() -> frameLayout.addView(flutterView, layout));
}
}
文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦!!
想阅读作者的更多文章,可以查看我 个人博客 和公共号:
振兴书城 2人点赞 Flutter
静默加载 拥有110钻 (约13.03元) 关注 "小礼物走一走,来简书关注我" 赞赏
广告
推荐阅读更多精彩内容
- Flutter学习小计:Android原生项目引入Flutter 前言目前Flutter可以说是非常火热了,多次更新过后也越来越稳定,受到了很多开发者的青睐。不过纯Flutter开...
快乐丸 - Android Flutter实践内存初探 摘要:Android Flutter实践内存初探 闲鱼技术-匠修我们想使用Flutter来统一移动App开发并做了...
猫耳呀 - Flutter 开发-Flutter与Android混合开发 之前项目混合开发使用了cordova,但是native+flutter的混合开发方案更加受到青睐,所以也学习一波。...
伊泽瑞额 - Flutter混合开发二-FlutterBoost使用介绍 前言 《Flutter混合开发专题一》中我们介绍了Flutter官方提供的混合开发解决方案,但是其存在着一些问题并...
Flutter编程指南 - Flutter完整开发实战详解(十四、混合开发打包 Android 篇) 本篇将带你深入了解 Flutter 中打包和插件安装等原理,帮你快速完成 Flutter 集成到现有 Androi...
恋猫月亮
静默加载关注 拥有110钻 (约13.03元) Java版的7种单例模式 阅读 8 Dart和Java通信源码分析和实践 阅读 86 从JNI_OnLoad看so的加载 阅读
59
精彩继续
李敖前妻胡因梦:遇到一个渣男,她整整消化了40年 阅读 14902
日本最省女孩15年买3栋豪宅:比赚钱更重要的,是做好这3件事 阅读 22986
广告
评论1 赞2 2赞3赞 赞赏