WebView崩溃导致整个应用程序崩溃

时间:2015-08-11 05:18:02

标签: android android-webview

我正在使用内置Web View的Android开发浏览器。其中我遇到一个问题,当我访问http://crashmybrowser.com以检测选项卡在我的浏览器上崩溃时,我的整个浏览器应用程序崩溃了。然而,当对chrome或opera进行相同的测试时,这些浏览器在崩溃中幸免于难,并且只有特定的选项卡崩溃,这是因访问上述网站而预期的。 任何人都可以帮助理解我如何在使用Webview的浏览器上处理此崩溃。

注意:我已经测试过,在访问http://crashmybrowser.com网站时,使用内置于webview中的Android的其他浏览器也会崩溃。

崩溃日志下面:

    E/chromium(24703): ### WebView Version 44.0.2403.90 (code 240309050)
--------- beginning of crash
F/libc    (24703): Fatal signal 11 (SIGSEGV), code 2, fault addr 0x7f928c4fe0 in tid 24744 (Thread-461)
I/DEBUG   ( 1078): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   ( 1078): Build fingerprint: 'google/volantis/flounder:5.0.2/LRX22L/1816899:user/release-keys'
I/DEBUG   ( 1078): Revision: '0'
I/DEBUG   ( 1078): ABI: 'arm64'
I/DEBUG   ( 1078): pid: 24703, tid: 24744, name: Thread-461  >>> net.browse.Browser <<<
I/DEBUG   ( 1078): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x7f928c4fe0
I/DEBUG   ( 1078):     x0   000000104530c660  x1   0000000000000003  x2   0000000000000000  x3   0000000000001be4
I/DEBUG   ( 1078):     x4   00000010e9e10140  x5   0000000000000000  x6   0000000000000000  x7   0000007fab948000
I/DEBUG   ( 1078):     x8   0000007f929c0100  x9   0000000000000010  x10  0000007fab948e98  x11  0000000000000001
I/DEBUG   ( 1078):     x12  0000000000000001  x13  0000000000000033  x14  00000055ab3a9000  x15  003b9aca00000000
I/DEBUG   ( 1078):     x16  0000007f98a4c2d8  x17  0000007fab8c4f64  x18  0000000000000000  x19  000000104530c660
I/DEBUG   ( 1078):     x20  000000104530c660  x21  0000000000000003  x22  0000000000000000  x23  0000000000000000
I/DEBUG   ( 1078):     x24  0000007f929c00e8  x25  00000010452041c4  x26  0000000000000001  x27  0000007f98605444
I/DEBUG   ( 1078):     x28  00000000fffffffe  x29  0000007f928c5000  x30  0000007f977073cc
I/DEBUG   ( 1078):     sp   0000007f928c5000  pc   0000007f97701360  pstate 00000000a0000000
I/DEBUG   ( 1078):
I/DEBUG   ( 1078): backtrace:
I/DEBUG   ( 1078):     #00 pc 0000000001a97360  /data/app/com.google.android.webview-2/lib/arm64/libwebviewchromium.so
W/ActivityManager( 1323):   Force finishing activity net.browse.Browser/.ui.activities.BrowseContainerActivity
I/DEBUG   ( 1078):
I/DEBUG   ( 1078): Tombstone written to: /data/tombstones/tombstone_02
E/JavaBinder( 1323): !!! FAILED BINDER TRANSACTION !!!
W/ActivityManager( 1323): Exception thrown during pause
W/ActivityManager( 1323): android.os.TransactionTooLargeException
W/ActivityManager( 1323):       at android.os.BinderProxy.transactNative(Native Method)
W/ActivityManager( 1323):       at android.os.BinderProxy.transact(Binder.java:496)
W/ActivityManager( 1323):       at android.app.ApplicationThreadProxy.schedulePauseActivity(ApplicationThreadNative.java:701)
W/ActivityManager( 1323):       at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:852)
W/ActivityManager( 1323):       at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:2754)
W/ActivityManager( 1323):       at com.android.server.am.ActivityStack.finishTopRunningActivityLocked(ActivityStack.java:2611)
W/ActivityManager( 1323):       at com.android.server.am.ActivityStackSupervisor.finishTopRunningActivityLocked(ActivityStackSupervisor.java:2453)
W/ActivityManager( 1323):       at com.android.server.am.ActivityManagerService.handleAppCrashLocked(ActivityManagerService.java:11511)
W/ActivityManager( 1323):       at com.android.server.am.ActivityManagerService.makeAppCrashingLocked(ActivityManagerService.java:11408)
W/ActivityManager( 1323):       at com.android.server.am.ActivityManagerService.crashApplication(ActivityManagerService.java:12087)
W/ActivityManager( 1323):       at com.android.server.am.ActivityManagerService.handleApplicationCrashInner(ActivityManagerService.java:11603)
W/ActivityManager( 1323):       at com.android.server.am.NativeCrashListener$NativeCrashReporter.run(NativeCrashListener.java:86)
E/lowmemorykiller(  146): Error writing /proc/24703/oom_score_adj; errno=22
I/OpenGLRenderer( 1323): Initialized EGL, version 1.4
I/WindowState( 1323): WIN DEATH: Window{af1d060 u0 net.browse.Browser/net.browse.Browser.ui.activities.BrowseContainerActivity}
W/LocationOracleImpl( 1863): Best location was null
I/Zygote  ( 1084): Process 24703 exited due to signal (11)
I/ActivityManager( 1323): Process net.browse.Browser (pid 24703) has died

1 个答案:

答案 0 :(得分:3)

与Chrome或Opera不同,Android WebView在单个进程中运行,并与您的活动共享该进程。如果网页开始过度使用内存(如您所提到的页面),那么您无法在应用程序方面做任何事情来防止崩溃。

您的应用程序中可以有多个进程(请参阅http://developer.android.com/guide/components/processes-and-threads.html#Processes)并在单独的进程中运行包含WebView的活动。然后WebView崩溃不会影响您的主应用程序。但请注意,如果活动将托管多个WebView(例如,作为浏览器的选项卡),其中一个崩溃将导致整个活动及其托管的所有其他WebView。因此,它仍然与Chrome不同,其中标签被分组到进程中,并且一个选项卡中的崩溃只会关闭同一组中的标签,但不会打开您打开的所有标签。

您可以尝试从Chromium源中获取,而不是在浏览器中使用WebView,请参阅https://www.chromium.org/developers/how-tos/android-build-instructions