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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

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

Avatar for Evgeny

Evgeny

June 02, 2023
Tweet

Other Decks in Programming

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