网络视图是否像视频视图一样创建一个单独的表面



我有一个困惑,期待对此发表一些评论。我假设 WebView 创建了一个单独的图面进行绘制,并且不使用活动的默认图面进行绘制。但是,在表面转储中,我没有看到在使用 webview 时创建新表面。

当我使用videoview进行类似的体验时,我看到创建了一个单独的表面。

在webview上,我还想播放一个视频,所以假设将创建一个单独的表面,因此表面分辨率将按照视频分辨率。但是,如果它使用应用程序的图面,则视频的最大分辨率必须是 UI 分辨率。

在铬代码中,我看到了单独表面的代码,但实际上我看不到一个被创建。

有人可以帮助我澄清这一点。

谢谢。

如果您查看VideoView继承图,您会注意到它继承自SurfaceView,而WebView则没有,因此WebView只能通过创建外部SurfaceView来实现这一点。

而如果您在 Chromium 代码的 WebView 部分中搜索 ExternalVideoSurface 的用法,您会注意到只有在启用"视频孔"时才启用它,这仅用于解码加密视频,其中 WebView 需要做"打孔"。WebView 中有一个系统 API 级别的设置可以启用此行为,但它有其自身的局限性,因此通常不建议使用。

我也很好奇网络视图不在 sufaceflinger dump 中。

我认为原因是webview也呈现到相关的活动本机窗口,因此在这种情况下没有另一个表面。

但是,在最新的Android和Webview版本中,开发人员的选择似乎有所不同。

最新更新