前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter混合开发:启动黑屏处理

Flutter混合开发:启动黑屏处理

作者头像
静默加载
发布2020-05-29 11:12:23
2.5K0
发布2020-05-29 11:12:23
举报
文章被收录于专栏:振兴的Android修炼手册

上一篇 Flutter混合开发:Android接入Flutter 我们讲到在 Flutter混合开发 中主要有、有 addView (页面局部Flutter) 和 setContentView (整个页面Flutter)两种方式。这两种方式在启动页面的时候都会遇到 FlutterView 出现黑屏的情况。

解决思路

延迟 FlutterView 的加载时间。

setContentView

代码语言:javascript
复制
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

代码语言:javascript
复制
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的第一帧

代码语言:javascript
复制
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的添加

代码语言:javascript
复制
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));
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决思路
  • setContentView
  • addView
    • 检测FlutterView的第一帧
      • 在View的post方法中延迟执行FlutterView的添加
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档