2015-06-14 15 views
8

Ich habe eine App geschrieben, die HTML-Seiten in Webviews anzeigt, die in einem ViewPager verwaltet werden. Alles funktioniert gut, aber ich habe ein paar ANRs gehabt, wenn ich von einer Seite zur anderen gewischt habe. Der ANR-Daten-Dump zeigt, dass der Haupt-Thread über ThreadedRenderer.nSyncAndDrawFrame() aufgerufen hat, der eine systemeigene Methode aufruft, die scheinbar mit dem Renderer-Thread kommuniziert und darauf wartet, dass dieser Thread das Zeichnen der Ansicht beendet. Da beide systemeigenen Code ausführen, ist es schwierig herauszufinden, was passiert, aber es scheint, dass der Renderer-Thread nie signalisiert hat, dass der Haupt-Thread fortgesetzt wird, was wiederum den ANR verursacht. Vor dem ANR-Bericht ist nichts im Logcat vorhanden, das auf ein Problem hindeutet.Webview verursacht ANR

Hat jemand Vorschläge, wie Sie dies beheben können? Ich gehe davon aus, dass der Aufruf von ThreadedRenderer.nSyncAndDrawFrame() mit dem Webview verknüpft ist, aber ich habe eigentlich nichts zu bestätigen.

Das Problem ist nicht wiederholbar in dem Sinne, dass, wenn ich die App neu starte und zu der gleichen Seite navigiere, die angezeigt wurde, als der ANR auftrat, passiert es nicht wieder. Gerät ist ein Nexus 7 mit Android 5.1.

ANR stacktrace für Haupt- und Renderer-Themen:

"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/[email protected]@boot.oat (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 00f /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) 
+0

Haben Sie eine Lösung gefunden? Ich habe das gleiche Problem und ich kann es nur mit einem Nexus 7 reproduzieren, wenn es viele große Elemente in der ViewPager – Tughi

+0

@Tughi No Lösung gibt, aber ich merke es auch erst nach dem Paging einer relativ großen Anzahl von Fragmenten in der ViewPager. Ich habe gerade einige Änderungen an meiner FragmentStatePagerAdapter-Implementierung vorgenommen und werde sehen, ob es einen Unterschied macht. – Clyde

+0

@Clyde Können Sie erklären, was Ihre Änderungen sind und sind sie hilfreich? Ich hatte das gleiche Problem auf meinen Geräten. Die Lösung zum Deinstallieren der WebView-Updates kann nur eine zeitliche Lösung sein. – mars3142

Antwort

1

ich mit diesem Problem konfrontiert zu scheint, dass Chromium bug, dass mit den neuesten Chromium Webview 43.0.23567.121 verwandt ist. Sie können versuchen, eine Webansicht in Ihrer App zurückzusetzen und sie erneut zu überprüfen. Für mich Problem reproduzierbar nur bei der neuesten Webview-Version.

+1

Scheint so zu sein: https://code.google.com/p/chromium/issues/detail?id=501901 –

0

es einen Fehler auf Android 7.0 WebView sein kann, können Sie es durch zwei Möglichkeiten unten beheben:

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

2, android: hardwareAccelerated = "false"

Verwandte Themen