webview是否像videoview一样创建了一个单独的表面?

时间:2015-03-13 09:02:10

标签: android android-webview android-videoview

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

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

Onwebview也是,我想播放视频,所以假设将创建一个单独的表面,从而表面分辨率将按照视频分辨率。但如果它使用应用程序的表面,那么视频的最大分辨率必须是UI分辨率。

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

有人可以帮我澄清一下吗。

谢谢。

2 个答案:

答案 0 :(得分:2)

如果您查看VideoView inheritance graph,您会发现它继承自SurfaceView,而WebView does not,因此WebView只能通过创建外部SurfaceView来实现。

如果您search for usages of ExternalVideoSurface in WebView part of Chromium code,您会注意到只有在启用“视频孔”时才会启用它,该视频孔仅用于解码加密视频,其中WebView需要执行“打孔”。有一个System API-level setting in WebView可以启用此行为,但它有自己的限制,因此不建议一般使用。

答案 1 :(得分:0)

我也很好奇webview不在sufaceflinger转储中。

我认为原因是webview也会渲染到相关的活动本机窗口,因此在这种情况下没有其他表面。

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