Webview hace que ANR

He escrito una aplicación que muestra páginas html en Webviews, que se administran en un ViewPager. Todo funcionando bien, pero he tenido algunos ANRs al pasar de una página a otra. El volcado de datos ANR muestra que el subproceso principal ha llamado a través de ThreadedRenderer.nSyncAndDrawFrame () que llama a un método nativo, que aparentemente se comunica con el subproceso de Renderer y espera que el hilo termine de dibujar la vista. Dado que ambos están ejecutando código nativo es difícil averiguar lo que está pasando, pero parece que el hilo Renderer nunca ha señalado el hilo principal para reanudar, por lo tanto, la causa de la ANR. No hay nada en el logcat antes del informe ANR que sugiera cualquier problema.

¿Alguien tiene sugerencias para cómo solucionar esto? Estoy asumiendo que la llamada a ThreadedRenderer.nSyncAndDrawFrame () se asocia con el Webview, pero realmente no tengo nada confirmar eso.

El problema no es repetible, en el sentido de que si reinicio la aplicación y navego a la misma página que estaba mostrando cuando se produjo la ANR, no vuelve a suceder. El dispositivo es un Nexus 7 con Android 5.1.

ANR stacktrace para los hilos principal y renderer:

"main" prio=5 tid=1 Native | group="main" sCount=1 dsCount=0 obj=0x73547000 self=0xb4827800 | sysTid=1248 nice=-6 cgrp=default sched=0/0 handle=0xb6fd6bec | state=S schedstat=( 0 0 0 ) utm=6035 stm=1406 core=0 HZ=100 | stack=0xbe5a6000-0xbe5a8000 stackSize=8MB | held mutexes= kernel: (couldn't read /proc/self/task/1248/stack) native: #00 pc 000133b8 /system/lib/libc.so (syscall+28) native: #01 pc 00016a81 /system/lib/libc.so (__pthread_cond_timedwait_relative(pthread_cond_t*, pthread_mutex_t*, timespec const*)+56) native: #02 pc 0003c73b /system/lib/libhwui.so (???) native: #03 pc 0003c771 /system/lib/libhwui.so (???) native: #04 pc 0083fd83 /data/dalvik-cache/arm/system@[email protected] (Java_android_view_ThreadedRenderer_nSyncAndDrawFrame__JJJF+134) at android.view.ThreadedRenderer.nSyncAndDrawFrame(Native method) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:340) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2530) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2352) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke!(Native method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) "RenderThread" prio=5 tid=26 Native | group="main" sCount=1 dsCount=0 obj=0x12c07820 self=0xa1c30800 | sysTid=1303 nice=-4 cgrp=default sched=0/0 handle=0xa1c44c00 | state=S schedstat=( 0 0 0 ) utm=8314 stm=1817 core=0 HZ=100 | stack=0xa0cc2000-0xa0cc4000 stackSize=1012KB | held mutexes= kernel: (couldn't read /proc/self/task/1303/stack) native: #00 pc 000133b8 /system/lib/libc.so (syscall+28) native: #01 pc 0001741b /system/lib/libc.so (__futex_wait_ex+42) native: #02 pc 00017761 /system/lib/libc.so (pthread_mutex_lock+230) native: #03 pc 0001d767 /system/vendor/lib/libgsl.so (os_mutex_lock+6) native: #04 pc 0001ea88 /system/vendor/lib/egl/libEGL_adreno.so (egliDoDestroyEGLImage+180) native: #05 pc 0008698d /system/vendor/lib/egl/libGLESv2_adreno.so (rb_image_try_release+32) native: #06 pc 00086acf /system/vendor/lib/egl/libGLESv2_adreno.so (rb_destroy_resource_updates_pure+136) native: #07 pc 00085491 /system/vendor/lib/egl/libGLESv2_adreno.so (rb_perform_resolve+276) native: #08 pc 00085761 /system/vendor/lib/egl/libGLESv2_adreno.so (rb_resolve+464) native: #09 pc 0008a891 /system/vendor/lib/egl/libGLESv2_adreno.so (rb_surface_swap+228) native: #10 pc 0006af89 /system/vendor/lib/egl/libGLESv2_adreno.so (gl2_surface_swap+76) native: #11 pc 0005d12b /system/vendor/lib/egl/libGLESv2_adreno.so (oglSwapBuffer+194) native: #12 pc 00013ddc /system/vendor/lib/egl/libEGL_adreno.so (qeglDrvAPI_eglSwapBuffers+1776) native: #13 pc 00007b60 /system/vendor/lib/egl/libEGL_adreno.so (eglSwapBuffers+16) native: #14 pc 0001237f /system/lib/libEGL.so (eglSwapBuffers+290) native: #15 pc 0003d291 /system/lib/libhwui.so (???) native: #16 pc 0003bd05 /system/lib/libhwui.so (???) native: #17 pc 0003beb5 /system/lib/libhwui.so (???) native: #18 pc 0003caed /system/lib/libhwui.so (???) native: #19 pc 0003e743 /system/lib/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+66) native: #20 pc 000104d5 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+112) native: #21 pc 0005f839 /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+72) native: #22 pc 00010045 /system/lib/libutils.so (???) native: #23 pc 00016baf /system/lib/libc.so (__pthread_start(void*)+30) native: #24 pc 00014af3 /system/lib/libc.so (__start_thread+6) 

Me enfrenté con este problema también Parece que el error de cromo, que se relaciona con la última versión de Chromium Webview 43.0.23567.121. Puedes intentar retroceder la vista web en tu aplicación y volver a comprobarla. Para mí la edición reproduce solamente en la última versión de Webview.

Puede ser un error en Android 7.0 WebView, puedes arreglarlo de dos maneras a continuación:

1, webView.setLayerType (View.LAYER_TYPE_SOFTWARE, null);

2, android: hardwareAccelerated = "false"

  • YouTube Video no se reproduce en WebView - Android
  • El WebView que se ejecuta en el emulador en Android Studio no puede acceder a Internet, pero Chrome puede?
  • El teclado de Android WebView oculta el campo de entrada en el fragmento en android
  • Cada navegador basado en WebKit bloquea sitios usando Omniture. ¿Por qué?
  • Agregar una barra de progreso en WebView
  • La vista de Android Web no muestra contenido HTML cargado en algún teléfono específicamente htc una x
  • WebView devuelve una ventana incorrecta.innerHeight
  • DownloadListener.onDownloadStart () nunca llamado
  • Bloquear los anuncios de los que aparecen en la vista web de Android
  • Androide WebView: manejar las teclas de flecha en JavaScript
  • Deshabilitar Android WebView / WebViewClient Iniciado favicon.ico Solicitar
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.