Android中WebView在显示时出现段错误

4

我有一个包含webview的fragment。它几个月来一直运行良好。我在其中嵌入了HTML(一个生成的字符串)并进行了一些尝试,我认为它引用了错误的字体。

结果是,现在在一个设备上(Galaxy Nexus),该webview无论何时显示都会导致应用程序崩溃 - 但只发生在我测试的这台设备上,其他设备上测试都正常。它在viewpager中后台加载,因此我知道它初始化正确,但当它显示时,它总是在该设备上导致应用程序崩溃。

所以看起来好像某些缓存数据没有被清除。我无法理解为什么相同的APK可以在所有其他设备上工作(所有Android版本),但只有在这一台设备上崩溃。

我已尝试使用以下方式清除缓存:

_web.clearCache(true);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

但没有任何区别。我可以清除其他缓存吗? 我已经重启了手机 - 没有任何变化。

寻找任何解决此错误的想法 - 无论多么疯狂!

这里是段错误 - 看起来与OpenGL相关 - - Webview是否使用OpenGL进行字体渲染? - Webview是否有字体缓存?

D/TilesManager( 5776): new EGLContext from framework: 50c5df28 
D/GLWebViewState( 5776): Reinit shader
W/webcore ( 5776): skip viewSizeChanged as w is 0
D/GLWebViewState( 5776): Reinit transferQueue
D/MyPodV2 ( 5776): load page:0 - 0.0
D/MyPodV2 ( 5776): load page:720 - 100.0
F/libc    ( 5776): Fatal signal 11 (SIGSEGV) at 0x00000008 (code=1), thread 5776 (nelweb.mypod.v2)
I/DEBUG   (  121): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (  121): Build fingerprint: 'samsung/yakjuxw/maguro:4.1.1/JRO03C/I9250XWLH2:user/release-keys'
I/DEBUG   (  121): pid: 5776, tid: 5776, name: nelweb.mypod.v2  >>> co.uk.sentinelweb.mypod.v2 <<<
I/DEBUG   (  121): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000008
I/DEBUG   (  121):     r0 00000008  r1 585b7008  r2 00000010  r3 00000004
I/DEBUG   (  121):     r4 56dbdb90  r5 56dbe9c0  r6 00000001  r7 00000004
I/DEBUG   (  121):     r8 00000008  r9 00000001  sl 00000004  fp 00000001
I/DEBUG   (  121):     ip 00000001  sp beac4180  lr 5863688c  pc 5865f774  cpsr 80000010
I/DEBUG   (  121):     d0  000000003e8374f1  d1  0000000000000000
I/DEBUG   (  121):     d2  3e8374f100000000  d3  0000000000000000
I/DEBUG   (  121):     d4  0000000000000000  d5  000000003f800000
I/DEBUG   (  121):     d6  426d42bcc1248268  d7  3f80000000000000
I/DEBUG   (  121):     d8  4411c6fc438013e9  d9  4507000000000000
I/DEBUG   (  121):     d10 43e72bda4481c000  d11 43e670f943e670f9
I/DEBUG   (  121):     d12 43e670f943e670f9  d13 bfa2695643f6cead
I/DEBUG   (  121):     d14 00000000bd134ab6  d15 0000000000000000
I/DEBUG   (  121):     d16 0000000800000000  d17 0000000000000000
I/DEBUG   (  121):     d18 0000000000000000  d19 0000000000000000
I/DEBUG   (  121):     d20 3ff0000000000000  d21 0000000000000000
I/DEBUG   (  121):     d22 0000000000000000  d23 0000000000000000
I/DEBUG   (  121):     d24 0000000000000000  d25 0000000000000000
I/DEBUG   (  121):     d26 0000000000000000  d27 0000000000000000
I/DEBUG   (  121):     d28 0000000000000000  d29 0000000000000000
I/DEBUG   (  121):     d30 0000000000000000  d31 0000000000000000
I/DEBUG   (  121):     scr 20000013
I/DEBUG   (  121): 
I/DEBUG   (  121): backtrace:
I/DEBUG   (  121):     #00  pc 00034774  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
I/DEBUG   (  121):     #01  pc 0000b888  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
I/DEBUG   (  121): 
I/DEBUG   (  121): stack:
I/DEBUG   (  121):          beac4140  03d00000  
I/DEBUG   (  121):          beac4144  00000000  
I/DEBUG   (  121):          beac4148  5c7b3dd0  
I/DEBUG   (  121):          beac414c  586d79f8  
I/DEBUG   (  121):          beac4150  56dbea6c  
I/DEBUG   (  121):          beac4154  585b6c7c  /dev/pvrsrvkm
I/DEBUG   (  121):          beac4158  00000002  
I/DEBUG   (  121):          beac415c  00000004  
I/DEBUG   (  121):          beac4160  56dbea6c  
I/DEBUG   (  121):          beac4164  56dbdb90  
I/DEBUG   (  121):          beac4168  56dbe9bc  
I/DEBUG   (  121):          beac416c  00000000  
I/DEBUG   (  121):          beac4170  00000004  
I/DEBUG   (  121):          beac4174  00000023  
I/DEBUG   (  121):          beac4178  df0027ad  
I/DEBUG   (  121):          beac417c  00000000  
I/DEBUG   (  121):     #00  beac4180  56dbdb90  
I/DEBUG   (  121):          ........  ........
I/DEBUG   (  121):     #01  beac4180  56dbdb90  
I/DEBUG   (  121):          beac4184  5863688c  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
I/DEBUG   (  121):          beac4188  56dbdb90  
I/DEBUG   (  121):          beac418c  00000004  
I/DEBUG   (  121):          beac4190  00000004  
I/DEBUG   (  121):          beac4194  00000000  
I/DEBUG   (  121):          beac4198  00000005  
I/DEBUG   (  121):          beac419c  5863898c  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
I/DEBUG   (  121):          beac41a0  56dbdb90  
I/DEBUG   (  121):          beac41a4  00000004  
I/DEBUG   (  121):          beac41a8  00000000  
I/DEBUG   (  121):          beac41ac  5868606c  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
I/DEBUG   (  121):          beac41b0  00000005  
I/DEBUG   (  121):          beac41b4  58639a70  /system/vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so (glDrawArrays+804)
I/DEBUG   (  121):          beac41b8  00000004  
I/DEBUG   (  121):          beac41bc  00000000  
I/DEBUG   (  121): 
I/DEBUG   (  121): memory near r1:
I/DEBUG   (  121):     585b6fe8 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (  121):     585b6ff8 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (  121):     585b7008 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (  121):     585b7018 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (  121):     585b7028 ffffffff ffffffff ffffffff ffffffff  ................
I/DEBUG   (  121): 
I/DEBUG   (  121): memory near r4:
I/DEBUG   (  121):     56dbdb70 10000298 58ec5138 5dc1229f 00000298  ....8Q.X.".]....
I/DEBUG   (  121):     56dbdb80 58ca335c 5dbf356f 00000000 00000f9b  \3.Xo5.]........
I/DEBUG   (  121):     56dbdb90 00000018 0000e7fd 00001c80 00001100  ................
I/DEBUG   (  121):     56dbdba0 00001100 00000024 000003aa 00000064  ....$.......d...
I/DEBUG   (  121):     56dbdbb0 00000064 00000064 00000064 00000004  d...d...d.......
I/DEBUG   (  121): 
I/DEBUG   (  121): memory near r5:
I/DEBUG   (  121):     56dbe9a0 00000000 00000000 00000000 00000000  ................
I/DEBUG   (  121):     56dbe9b0 00000000 00000000 56dbe794 56dbe83c  ...........V<..V
I/DEBUG   (  121):     56dbe9c0 56dbe86c 00000000 00000000 00000000  l..V............
I/DEBUG   (  121):     56dbe9d0 00000000 00000000 00000000 00000000  ................
I/DEBUG   (  121):     56dbe9e0 00000002 00000003 00000003 00000004  ................
I/DEBUG   (  121): 
I/DEBUG   (  121): memory near sp:
I/DEBUG   (  121):     beac4160 56dbea6c 56dbdb90 56dbe9bc 00000000  l..V...V...V....
I/DEBUG   (  121):     beac4170 00000004 00000023 df0027ad 00000000  ....#....'......
I/DEBUG   (  121):     beac4180 56dbdb90 5863688c 56dbdb90 00000004  ...V.hcX...V....
I/DEBUG   (  121):     beac4190 00000004 00000000 00000005 5863898c  ..............cX
I/DEBUG   (  121):     beac41a0 56dbdb90 00000004 00000000 5868606c  ...V........l`hX
I/DEBUG   (  121): 
I/DEBUG   (  121): code around pc:
I/DEBUG   (  121):     5865f754 e781410c e28cc001 e15c0003 3afffffa  .A........\....:
I/DEBUG   (  121):     5865f764 e8bd8010 e92d4010 e3a0c000 ea000004  .....@-.........
I/DEBUG   (  121):     5865f774 e5904000 e5014008 e5904004 e0800002  .@...@...@......
I/DEBUG   (  121):     5865f784 e5014004 e15c0003 e2811008 e28cc001  .@....\.........
I/DEBUG   (  121):     5865f794 3afffff6 e8bd8010 e92d4010 e3a0c000  ...:.....@-.....
I/DEBUG   (  121): 
I/DEBUG   (  121): code around lr:
I/DEBUG   (  121):     5863686c e3530000 1a000005 e1a03007 e59c0018  ..S......0......
I/DEBUG   (  121):     5863687c e59c101c e59c2014 e1a0e00f e59cf024  ..... ......$...
I/DEBUG   (  121):     5863688c e2866001 e2855004 e5942e50 e3a03001  .`...P..P....0..
I/DEBUG   (  121):     5863689c e1560002 3affffeb e2840eed e1a01008  ..V....:........
I/DEBUG   (  121):     586368ac e280000c e1a02003 e8bd41f0 eaffe178  ..... ...A..x...
I/BootReceiver(  316): Copying /data/tombstones/tombstone_02 to DropBox (SYSTEM_TOMBSTONE)

UPDATE 10/03/13: 这是我用来停止缓存的代码 - 显然我有点绝望。
_web.clearCache(true);
        _web.setAnimationCacheEnabled(false);
        _web.setDrawingCacheEnabled(false);
        _web.setAlwaysDrawnWithCacheEnabled(false);
        _web.clearHistory();
        _web.clearFormData();
        webSettings.setJavaScriptEnabled(false);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webSettings.setAppCacheMaxSize(0);
        webSettings.setAppCachePath("");
        webSettings.setAppCacheEnabled(false);
        getActivity().deleteDatabase("webview.db");
        getActivity().deleteDatabase("webviewCache.db");
        webSettings.setDomStorageEnabled(false);
        webSettings.setLoadsImagesAutomatically(false);
        _web.setWillNotCacheDrawing(true);
        webSettings.setBuiltInZoomControls(false);
        webSettings.setSupportZoom(false);
        webSettings.setSaveFormData(false);
        //_web.setWillNotDraw(true);// loads but stops drawing
        webSettings.setRenderPriority(WebSettings.RenderPriority.LOW);

有趣的是,_web.setWillNotDraw(true); 阻止了段错误但没有任何绘制(这是合理的),所以这表明段错误必须在 webview 的绘图代码中。

我已经卸载了该应用并重新安装。 - siliconeagle
2个回答

3

Webview缓存是应用程序特定的,因此,如果像您描述的那样只是临时问题,卸载并重新安装应用程序应该可以解决此问题。

更详细地说,缓存位于以下位置:

/data/data/your.package.name/cache/

您可以查看这个目录,但我们需要考虑是否有权限访问它。

如果您的应用程序是为调试而构建的,则此adb命令可能允许您查看目录内容:

run-as your.package.name ls /data/data/your.package.name/cache/

在我的Galaxy S3上,相关文件名为“webviewCacheChromiumStaging”和“com.android.renderscript.cache”,因此您的结果可能会有所不同。


2
你是对的 - 实际问题是因为我在webview下面有一个视图(飞入菜单) - 因此卸载和重新安装似乎没有任何区别。不过隐藏webview下面的视图确实起作用了。奇怪的是,它只发生在一个设备上(Galaxy Nexus),所以对我来说看起来像是三星特定的问题。所以这根本不是缓存相关的问题!只是看起来像而已。 - siliconeagle
嗨,siliconeagle,你能获取更多关于实际问题的信息吗?我目前在一些设备上甚至只有一个Webview上出现了这个问题,而且只对某些网页有效。调试相当困难...是Webview文件/绘图缓存吗?绘图层? - Benjamin Piette
@siliconeagle 我也对这个问题更多的细节感兴趣,我们的应用程序也经历了完全相同的问题。然而,我们只能在安装有Android 4.1.2的Nexus 7上重现segfault。我试图隔离问题,但我完全没有成功。不过,将WebViews隐藏起来可以解决问题。 - Rik

1
我使用的设置以防止使用缓存为:

 _web.clearCache(true);
 _web.setAppCacheEnabled(false);
 webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
 webSettings.setAppCacheMaxSize(0);
 webSettings.setAppCacheEnabled(false);
 mContext.deleteDatabase("webview.db");
 mContext.deleteDatabase("webviewCache.db");

同时,请查看:这个这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接