Flutter Android Virtual Display 实现原理

Virtual displays 是《Flutter 内嵌原生视图能力》在 Android 侧的第一套实现。在本文中,介绍它的实现原理。

如《Flutter Virtual displays》笔记中介绍:

虚拟显示将 android.view.View 实例渲染到一个纹理上,因此它不会嵌入到 Android Activity 的视图层级中。某些平台交互,如键盘处理和辅助功能可能无法工作。

使用 VirtualDisplay 机制,将原生视图渲染为纹理。在 Flutter 界面上开辟一个同样大小的只为,使用 Flutter Texture 渲染。这种不会附加到视图层次结构中。

如果你想了解如何写代码使用 Flutter Android 下的 Virtual displays 模式,可参考 Flutter 内嵌原生视图 Android 端接入实现 这篇文章。 在本文剩下的篇幅中,将介绍 Virtual displays 模式的底层实现原理

Note

注意,本文基于 Flutter Engine 2.10.5 版本。未来我也会基于 Flutter 3 新版本进行回顾,到时再更新本文。Flutter Engine 2.10.5 对应的 commit 为:57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab


Flutter 侧代码实现

在 Flutter 侧,开发者直接打交道的组件是 AndroidView。我们按照自底向上的方式,从最底层实现开始,一层层向上,最终到达开发者熟悉的 AndroidView

Flutter RenderAndroidView

Flutter AndroidViewController

Flutter TextureAndroidViewController

Flutter AndroidView

Flutter TextureLayer


Android 侧代码实现

Android VirtualDisplay

Flutter PlatformViewsChannel

Flutter SingleViewPresentation

Flutter VirtualDisplayController

Flutter PlatformViewsController


本文作者:Maeiee

本文链接:Flutter Android Virtual Display 实现原理

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!