Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как устроен Android WebView?

Как устроен Android WebView?

Доклад на тему того как работает Android WebView под капотом, как организован процесс рендеринга и его потенциальные проблемы.

Evgeny

June 02, 2023
Tweet

Transcript

  1. § Проблема. Crash МБ на экране ТЦ § Определение причины

    и поиск решения § Android WebView и Chromium § Chromium. Обработка рендеринга § Решение проблемы. GeckoView и Safe Browsing § Итоги План 2
  2. § Вызов onRenderProcessGone() не выполнялся при крэше WebView § Поведение

    не соответствует вызову § Приложение падает с ANR § Аналогичное поведение при открытии url в браузере Chome Поиск решения. Обработка завершения процесса рендеринга 7
  3. Android WebView и Chromium. Общая схема 8 Host Application android.webkit.Webview

    WebViewProvider Android Framework AwContents ContentViewCore Rendering Engine Chromium Content Layer
  4. § RenderView представляет собой Window (render thread, parent hwnd) §

    Управляет объектом WebView (ShowModalHTMLDialog(), RunJavaScriptAlert(), RunJavaScriptPrompt(), RunFileChooser()) § Управляет деревом элементов § Включает в себя межпроцессные обработчики сообщений (OnUndo(), OnRedo(), OnCut(), OnCopy(), OnPaste(), OnFind(), OnZoom() и т. д.) Обработка рендеринга. RenderView 9
  5. § RenderViewHost отвечает за создание и взаимодействие с RenderView §

    Предоставляет высокоуровневый API (Загрузка страниц, определение гранц экрана и т. д.) § Взаимодействует с RenderView через межпроцессные сообщения Обработка рендеринга. RenderViewHost 10 RenderViewHost RenderView IPC Messages API
  6. § Вызывается ~GpuProcessHost() § Выполняется проверка на завершение процесса §

    Выполняется проверка статуса завершения процесса Завершение рендеринга. GpuProcessHost 11
  7. § Termination status определяется не напрямую, а косвенно через strong

    process Завершение рендеринга. Termination Status 14
  8. Завершение рендеринга. Crash процесса 16 § Крэш процесса рендеринга приводит

    к крэшу приложения. Внештатная ошибка не обрабатывается, пишется только лог об ошибке § Корректное завершение процесса рендеринга системой сопровождается отправкой сигнала, которое отслеживается в Android Web View
  9. Завершение рендеринга. Crash процесса 17 § Крэш процесса рендеринга приводит

    к крэшу приложения. Внештатная ошибка не обрабатывается, пишется только лог об ошибке § Корректное завершение процесса рендеринга системой сопровождается отправкой сигнала, которое отслеживается в Android Web View
  10. Решение проблемы. Safe Browsing 19 § Рендеринг WebView выполняется в

    отдельном процессе § Механизм поддерживается начиная с Android 8.0
  11. § Mozilla Gecko View как решение проблемы § Рендеринг Android

    Web View в отдельном процессе исключает крэш исходного приложения § На версиях Android Web View > 74 виджет 2Gis работает корректно Итоги 20