Android WebView случайно не отвечает на сенсорные события

У меня проблема с моим веб-приложением для Android.

Приложение установлено на планшете (LGV700 - 4.4.2), который работает только для этой цели (питание 24/7).

Приложение представляет собой оболочку для веб-приложения с небольшими дополнительными функциями, загружаемыми с удаленного URL-адреса (веб-просмотр создается динамически в коде).

Проблема в том, что приложение случайным образом зависает/перестает реагировать на большинство сенсорных событий (обычно после длительного периода безотказной работы) и продолжается до тех пор, пока приложение не будет перезапущено.

Проверка приложения с помощью профилировщика показывает, что использование памяти велико, однако сборщик мусора, похоже, работает нормально, очищая всю неиспользуемую память, когда она вот-вот достигнет предела памяти.

Я попытался добавить свойство largeHeap и hardwareAccelerated в манифест, но, похоже, это не помогает.

Я не уверен, что это единственная проблема, но иногда приложение принудительно закрывается, и в logcat выдается следующая ошибка:

11-30 13:01:54.477  28591-28652/********* W/Adreno-EGLSUB﹕ <DequeueBuffer:736>: dequeue native buffer fail: Unknown error 2147483646, buffer=0x0, handle=0x0
11-30 13:01:54.487  28591-28652/********* W/Adreno-ES20﹕ <core_glFlush:52>: GL_OUT_OF_MEMORY
11-30 13:01:54.487  28591-28652/********* W/Adreno-EGLSUB﹕ <DequeueBuffer:736>: dequeue native buffer fail: Function not implemented, buffer=0x0, handle=0x0
11-30 13:01:54.487  28591-28652/********* E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(2123)] [GroupMarkerNotSet(crbug.com/242999)!:549845A5]GL ERROR :GL_OUT_OF_MEMORY : GLES2DecoderImpl::PrepareTexturesForRender: <- error from previous GL command
11-30 13:01:54.487  28591-28652/********* E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(4422)] Error: 5 for Command kDrawElements
11-30 13:01:54.487  28591-28652/********* W/Adreno-EGLSUB﹕ <DequeueBuffer:736>: dequeue native buffer fail: Function not implemented, buffer=0x0, handle=0x0
11-30 13:01:54.487  28591-28652/********* W/Adreno-EGL﹕ <qeglDrvAPI_eglSwapBuffers:3702>: EGL_BAD_SURFACE
11-30 13:01:54.487  28591-28652/********* W/OpenGLRenderer﹕ swapBuffers encountered EGL_BAD_SURFACE on 0xa542ff80, halting rendering...
11-30 13:01:54.777  28591-28652/********* W/google-breakpad﹕ ### ### ### ### ### ### ### ### ### ### ### ### ###
11-30 13:01:54.777  28591-28652/********* W/google-breakpad﹕ Chrome build fingerprint:
11-30 13:01:54.777  28591-28652/********* W/google-breakpad﹕ 1.0
11-30 13:01:54.777  28591-28652/********* W/google-breakpad﹕ 1
11-30 13:01:54.777  28591-28652/********* W/google-breakpad﹕ 45012863-7d3b-4c30-8ccf-e65394c57d85
11-30 13:01:54.777  28591-28652/********* W/google-breakpad﹕ ### ### ### ### ### ### ### ### ### ### ### ### ###
11-30 13:01:54.777  28591-28652/********* A/libc﹕ Fatal signal 11 (SIGSEGV), code 1, fault addr 0x54 in tid 28652 (RenderThread)

что выглядит как эта проблема: https://code.google.com/p/chromium/issues/detail?id=437017, но, похоже, это исправлено.

Когда приложение обнаруживает, что подключение к Интернету было потеряно, оно перезагружает веб-просмотр, используя функцию loadUrl с исходным URL-адресом.

Также стоит упомянуть, что я использую библиотеку «ANR-WatchDog» для обнаружения ошибок приложения, не отвечающего (проверяет, не отвечает ли основной поток более 5 секунд), однако при возникновении проблемы он молчит.

Любые идеи?


person Yair Cohen    schedule 30.11.2015    source источник


Ответы (1)


Попробуйте это в своем Java-коде:

webview.getSettings().setRenderPriority(RenderPriority.HIGH);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

и добавьте это в свой manifest.xml:

android:hardwareAccelerated="true"
person Luca Ziegler    schedule 30.11.2015
comment
Спасибо за быстрый ответ. Я уже использую команды выше. - person Yair Cohen; 30.11.2015
comment
bro setRenderPriority() устарел. пожалуйста, взгляните на это. - person Ranjith Kumar; 13.04.2016