【问题标题】:WebView crash causing whole application crashWebView 崩溃导致整个应用程序崩溃
【发布时间】:2015-08-11 05:18:02
【问题描述】:

我正在使用内置于 Web 视图的 Android 开发浏览器。其中,当我访问http://crashmybrowser.com 以测试浏览器上的选项卡崩溃时,我面临一个问题,即我的整个浏览器应用程序崩溃。但是,当在 chrome 或 opera 上进行相同的测试时,这些浏览器会在崩溃中幸存下来,并且只有特定的选项卡崩溃,这是由于访问上述网站而预期的结果。 任何人都可以帮助了解如何在使用 Webview 的浏览器上处理此崩溃。

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

崩溃日志如下:

    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

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    与 Chrome 或 Opera 不同,Android WebView 在单个进程中运行,并与您的 Activity 共享该进程。如果网页开始过度使用内存(如您提到的页面),则您无法在应用程序方面采取任何措施来防止崩溃。

    您的应用程序中可以有多个进程(请参阅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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 2016-06-04
      • 2011-08-24
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多