Я в замешательстве и с нетерпением жду комментариев по этому поводу. Я предполагал, что WebView создает отдельную поверхность для рисования и не использует поверхность по умолчанию для рисования. Но в дампе Surfaceflinger я не вижу создания новой поверхности при использовании веб-просмотра.

Когда я провожу аналогичный эксперимент с использованием видеопросмотра, я вижу, как создается отдельная поверхность.

В Onwebview я также хотел воспроизвести видео, поэтому предполагал, что будет создана отдельная поверхность и, следовательно, разрешение поверхности будет соответствовать разрешению видео. Но если он использует поверхность приложения, то максимальное разрешение видео должно соответствовать разрешению пользовательского интерфейса.

В коде хрома я вижу код для отдельной поверхности, но на практике я не мог видеть, как создается одна.

Может кто-нибудь помочь мне прояснить это.

Спасибо.

2
Sushil 13 Мар 2015 в 12:02

2 ответа

Лучший ответ

Если вы посмотрите на график наследования VideoView, вы заметите, что он наследуется от SurfaceView, а WebView нет, поэтому WebView может добиться этого только путем создания внешнего SurfaceView.

Если вы выполните поиск использования ExternalVideoSurface в части кода Chromium для WebView, вы заметите, что она активна только в том случае, если включена «дыра для видео», которая предназначена для использования только для декодирования зашифрованных видео, когда WebView необходимо «пробивать дыры». Существует системный уровень API в WebView, который позволяет такое поведение, но имеет свои ограничения, поэтому его не рекомендуется использовать в целом.

2
Mikhail Naganov 13 Мар 2015 в 12:02

Мне также любопытно, что веб-просмотр не находится в дампе sufaceflinger.

Я думаю, что причина в том, что веб-просмотр также отображается в собственном окне связанной активности, поэтому в этой ситуации нет другой поверхности.

Но ситуация в последней версии Android и Webview, похоже, отличается от разработчиков.

0
lirui 11 Ноя 2019 в 03:27