Я разрабатываю браузер с открытым исходным кодом под названием Lightning Browser, и у меня возникли проблемы с самым последним обновлением для Android (4.2.2).
WebViews не сможет полностью отобразиться до тех пор, пока не коснется вид. Это происходит только в последней версии Android. В 4.2.1 WebView визуализируется полностью. Я использую свой Nexus 7 для разработки, и сразу после того, как я получил обновление 4.2.2, браузер остановил рендеринг. Другие пользователи испытали это также, и это было подтверждено несколько раз, чтобы ТОЛЬКО на 4.2.2. Это происходит с ориентацией на уровень API 16 и 17, но я видел, что браузер WebKit ориентирован на уровень API 9 без этой проблемы.
Я попытался исправить это, используя решение проблемы, которую я нашел здесь в Qaru (Android WebView отображает пустой/белый, просмотр не обновляется при изменениях css или изменениях HTML, анимация изменчивая). ОДНАКО, установка WebView RenderPriority на высокий уровень не решает его... единственный способ заставить его визуализировать, не будучи затронутым, состоял в том, чтобы поместить команду invalidate() в метод OnDraw() WebView. Это заставляет WebView повторно рисовать непрерывно. Это работает (вроде), анимация плавная, страница загружается очень быстро, но это приводит к тому, что производительность WebView падает иначе.
Я тоже видел этот вопрос (очень похожий на мой), но для него нет хорошего ответа. Android WebView не удается полностью отобразить контент до взаимодействия с пользователем
По мере снижения производительности я подразумеваю ввод. Недостатки ввода текста, и сам WebView не может справиться с тем, что происходит, как и раньше. Бенчмаркинг браузера с вызовом метода invalidate() снижает производительность бенчмаркинга примерно на 8%. Я знаю, что в тестах есть не все, но он говорит мне, что непрерывный рисунок напрягает систему и заставляет систему игнорировать другие задачи.
В заключение... WebView в Android 4.2.2 не будет отображаться до тех пор, пока не коснется. Единственный способ, который я знаю, чтобы исправить это, - вызвать invalidate() в методе onDraw() WebView. Это плохо для производительности, и я ищу другой способ исправить это.
Магический код (в настоящее время я использую)...
class MyWebView extends WebView
{
@Override
onDraw(Canvas canvas)
{
invalidate();
super.OnDraw(canvas);
}
}
удалить
invalidate();
и он не отображается до тех пор, пока не коснется.
Есть ли у кого-нибудь предложения о том, как сделать рендеринг WebView (кроме того, что я сделал)? Кстати, это мой первый вопрос, который я задал здесь на Stack, так что простите меня, если я не был ясен или если я сделал что-то не так.
EDIT: Я нашел этот вопрос здесь об аналогичной проблеме, и это было решено, проблема в том, что я не понимаю, что означает ответ. Если бы кто-нибудь мог просветить меня, это могло бы помочь.
Я получаю эту ошибку в logcat
E/chromium(1243): external/chromium/net/disk_cache/backend_impl.cc:2022: [0705/172030:ERROR:backend_impl.cc(2022)] Corrupt Index file