我有一种困惑,期待对此发表一些意见。我假设WebView创建了一个单独的绘制表面,并且不使用活动的默认表面来绘制。但是,在surfaceflinger转储中,我在使用webview时没有看到创建新表面。
当我进行使用videoview的类似体验时,我看到一个单独的表面被创建。
Onwebview也是,我想播放视频,所以假设将创建一个单独的表面,从而表面分辨率将按照视频分辨率。但如果它使用应用程序的表面,那么视频的最大分辨率必须是UI分辨率。
在铬代码中,我看到了单独表面的代码,但实际上我看不到有人创建。
有人可以帮我澄清一下吗。
谢谢。
答案 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版本的情况似乎有所不同。