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

0

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

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

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

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

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

Я попробовал добавить в манифест свойство 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" lib для обнаружения ошибок, не отвечающих на проблему (проверяет, не отвечает ли основной поток больше 5 секунд), но он не работает, когда возникает проблема.

Есть идеи?

Теги:
webview
android-anr-dialog

1 ответ

0
Лучший ответ

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

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

и добавьте это в свой манифест. xml:

android:hardwareAccelerated="true"
  • 0
    Спасибо за быстрый ответ. Я уже использую команды выше.
  • 0
    bro setRenderPriority () устарела. пожалуйста, посмотрите это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню