作者:吉哈达
前言
随着使用Flutter开发的深入加之其生态还不完善,必然会涉及到使用原生View的情况。为此,Flutter也为我们提供了PlatformView方便我们嵌入原生View,以实现一些flutter暂时不支持的功能,但由此也引发了一些性能问题。
Flutter与原生View简介
实现
这里以Android来做一个简介(如果没用过原生View的话,可以百度教程),当我们需要使用一个Android的view时,我们在android端分别实现
你的类 extends PlatformView你的类 extends PlatformViewFactory
之后再通过registerViewFactory注册你的View,并设置一个ID。
我们在Flutter端,创建一个AndroidView,并通过上面的ID就可以获取到我们创建的androidView,并使用。
原理
那么Flutter使用原生View的背后是怎么实现的呢? 这里可以参考大佬们的文章:
Flutter完整开发实战详解(二十、 Android PlatformView 和键盘问题)
万万没想到——flutter这样外接纹理
从上面的文章我们可以知道,原生View生成texture数据同时自带一个textureId,数据再写入PixelBuffer后,flutter会通过这个ID到PixelBuffer中取到对应的数据并通过skia渲染。
借一张图
流程就是:
GPU->CPU->GPU
这样也就造成了资源的浪费,增加耗时。那么有没有其他的方法呢?