我很困惑,期待对此的一些评论。我假设 WebView 创建一个单独的表面来绘制,并且不使用 Activity 的默认表面来绘制。但是,在 SurfaceFlinger 转储中,我没有看到使用 WebView 时创建新的 Surface。
当我使用 videoview 进行类似的实验时,我看到创建了一个单独的表面。
在webview上,我也想播放视频,因此假设将创建一个单独的表面,因此表面分辨率将根据视频分辨率。但如果它使用应用程序的表面,那么视频的最大分辨率必须是UI分辨率。
在 chromium 代码中,我看到了单独表面的代码,但实际上我看不到创建的表面。
有人可以帮我澄清一下吗?
谢谢。
最佳答案
如果你看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可以实现这种行为,但它有其自身的局限性,因此不建议一般使用。
关于android - webview 是否像 videoview 一样创建一个单独的表面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29028315/