Android Lollipop 5.1 : Fatal signal 11 (SIGSEGV), 代码 2,错误地址 0x9e985ff8 in tid 4093 (RenderThread)/当使用大量 9-patch 图形时

标签 android nine-patch

我在应用 View 中使用了大量的 NinePatchDrawables。底层位图被缓存,因此不存在内存问题。

在准备/绘制屏幕时,应用程序崩溃并显示以下日志条目:

04-03 19:37:42.651: A/libc(4064): Fatal signal 11 (SIGSEGV), code 2, fault addr 0x9e985ff8 in tid 4093 (RenderThread)

此问题刚刚在最新的 Android 5.1 版本(LMY47D、LMY47E、LMY47I)中出现。 具有相同图形的相同 View 在 5.0.2 (LRX22C) 之前的早期 Android 版本上运行良好。 我在 Nexus 6 上遇到了这个问题,到目前为止我还没有机会在任何其他设备上测试它。

只有在使用大量 NinePatchDrawable 时才会发生崩溃,尤其是将它们层叠在一起时。当我加载与普通 png 完全相同的图形(仅用于测试)时,它可以正常工作。其他具有较少 NinePatchDrawables 的 View 也可以正常工作。

同样的问题存在于早期的 Android 版本(5.0.2 或更早版本)上,但它只是发生在每个屏幕至少三到四倍的 NinePatchDrawables 上。

04-03 19:37:42.651: A/libc(4064): Fatal signal 11 (SIGSEGV), code 2, fault addr 0x9e985ff8 in tid 4093 (RenderThread)
04-03 19:37:42.752: I/DEBUG(354): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-03 19:37:42.752: I/DEBUG(354): Build fingerprint: 'google/shamu/shamu:5.1/LMY47D/1743759:user/release-keys'
04-03 19:37:42.752: I/DEBUG(354): Revision: '33696'
04-03 19:37:42.752: I/DEBUG(354): ABI: 'arm'
04-03 19:37:42.752: I/DEBUG(354): pid: 4064, tid: 4093, name: RenderThread  >>> com.xyz.myapp <<<
04-03 19:37:42.752: I/DEBUG(354): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x9e985ff8
04-03 19:37:42.794: I/DEBUG(354):     r0 b4a23880  r1 aee24000  r2 00000000  r3 00000001
04-03 19:37:42.794: I/DEBUG(354):     r4 9e986064  r5 aec3c658  r6 00000001  r7 aec2c570
04-03 19:37:42.794: I/DEBUG(354):     r8 00000003  r9 00000001  sl 0000001c  fp aee24000
04-03 19:37:42.794: I/DEBUG(354):     ip aadb4948  sp 9e985ff8  lr aad072db  pc aac954a2  cpsr a0030030
04-03 19:37:42.795: I/DEBUG(354): backtrace:
04-03 19:37:42.795: I/DEBUG(354):     #00 pc 001024a2  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxResource::PrepareGpuAccess(EsxContext*, unsigned int, EsxAccessType)+1)
04-03 19:37:42.795: I/DEBUG(354):     #01 pc 0010d4fd  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::HwBlt(EsxBltCopy const*)+12)
04-03 19:37:42.795: I/DEBUG(354):     #02 pc 0010eb6b  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::Blt(EsxBltCopy const*)+10)
04-03 19:37:42.795: I/DEBUG(354):     #03 pc 0010ec81  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::BlitRect(EsxResource*, EsxResource*, EsxRect, EsxRect*, int)+272)
04-03 19:37:42.795: I/DEBUG(354):     #04 pc 0010ed67  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::PreserveBackBufferViaBlt(int)+126)
04-03 19:37:42.796: I/DEBUG(354):     #05 pc 001159a7  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::ProcessAndSubmitRendering(EsxFlushReason)+134)
04-03 19:37:42.796: I/DEBUG(354):     #06 pc 00177435  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::Flush(EsxFlushReason)+412)
04-03 19:37:42.796: I/DEBUG(354):     #07 pc 0017759d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::GetCmdSpace(EsxCmdBufType, unsigned int)+140)
04-03 19:37:42.796: I/DEBUG(354):     #08 pc 00173653  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBltHw(EsxBltCopy const*)+938)
04-03 19:37:42.796: I/DEBUG(354):     #09 pc 0017430d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBlt(EsxBltCopy const*)+132)
04-03 19:37:42.796: I/DEBUG(354):     #10 pc 0010d4fd  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::HwBlt(EsxBltCopy const*)+12)
04-03 19:37:42.796: I/DEBUG(354):     #11 pc 0010eb6b  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::Blt(EsxBltCopy const*)+10)
04-03 19:37:42.797: I/DEBUG(354):     #12 pc 0010ec81  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::BlitRect(EsxResource*, EsxResource*, EsxRect, EsxRect*, int)+272)
04-03 19:37:42.797: I/DEBUG(354):     #13 pc 0010ed67  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::PreserveBackBufferViaBlt(int)+126)
04-03 19:37:42.797: I/DEBUG(354):     #14 pc 001159a7  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::ProcessAndSubmitRendering(EsxFlushReason)+134)
04-03 19:37:42.797: I/DEBUG(354):     #15 pc 00177435  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::Flush(EsxFlushReason)+412)
04-03 19:37:42.797: I/DEBUG(354):     #16 pc 0017759d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::GetCmdSpace(EsxCmdBufType, unsigned int)+140)
04-03 19:37:42.797: I/DEBUG(354):     #17 pc 00173653  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBltHw(EsxBltCopy const*)+938)
04-03 19:37:42.798: I/DEBUG(354):     #18 pc 0017430d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBlt(EsxBltCopy const*)+132)
04-03 19:37:42.798: I/DEBUG(354):     #19 pc 0010d4fd  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::HwBlt(EsxBltCopy const*)+12)
04-03 19:37:42.798: I/DEBUG(354):     #20 pc 0010eb6b  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::Blt(EsxBltCopy const*)+10)
04-03 19:37:42.798: I/DEBUG(354):     #21 pc 0010ec81  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::BlitRect(EsxResource*, EsxResource*, EsxRect, EsxRect*, int)+272)
04-03 19:37:42.798: I/DEBUG(354):     #22 pc 0010ed67  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::PreserveBackBufferViaBlt(int)+126)
04-03 19:37:42.798: I/DEBUG(354):     #23 pc 001159a7  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::ProcessAndSubmitRendering(EsxFlushReason)+134)
04-03 19:37:42.798: I/DEBUG(354):     #24 pc 00177435  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::Flush(EsxFlushReason)+412)
04-03 19:37:42.799: I/DEBUG(354):     #25 pc 0017759d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::GetCmdSpace(EsxCmdBufType, unsigned int)+140)
04-03 19:37:42.799: I/DEBUG(354):     #26 pc 00173653  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBltHw(EsxBltCopy const*)+938)
04-03 19:37:42.799: I/DEBUG(354):     #27 pc 0017430d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBlt(EsxBltCopy const*)+132)
04-03 19:37:42.799: I/DEBUG(354):     #28 pc 0010d4fd  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::HwBlt(EsxBltCopy const*)+12)
04-03 19:37:42.799: I/DEBUG(354):     #29 pc 0010eb6b  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::Blt(EsxBltCopy const*)+10)
04-03 19:37:42.799: I/DEBUG(354):     #30 pc 0010ec81  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::BlitRect(EsxResource*, EsxResource*, EsxRect, EsxRect*, int)+272)
04-03 19:37:42.799: I/DEBUG(354):     #31 pc 0010ed67  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::PreserveBackBufferViaBlt(int)+126)
04-03 19:37:42.800: I/DEBUG(354):     #32 pc 001159a7  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::ProcessAndSubmitRendering(EsxFlushReason)+134)
04-03 19:37:42.800: I/DEBUG(354):     #33 pc 00177435  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::Flush(EsxFlushReason)+412)
04-03 19:37:42.800: I/DEBUG(354):     #34 pc 0017759d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::GetCmdSpace(EsxCmdBufType, unsigned int)+140)
04-03 19:37:42.800: I/DEBUG(354):     #35 pc 00173653  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBltHw(EsxBltCopy const*)+938)
04-03 19:37:42.800: I/DEBUG(354):     #36 pc 0017430d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBlt(EsxBltCopy const*)+132)
04-03 19:37:42.800: I/DEBUG(354):     #37 pc 0010d4fd  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::HwBlt(EsxBltCopy const*)+12)
04-03 19:37:42.801: I/DEBUG(354):     #38 pc 0010eb6b  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::Blt(EsxBltCopy const*)+10)
04-03 19:37:42.801: I/DEBUG(354):     #39 pc 0010ec81  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::BlitRect(EsxResource*, EsxResource*, EsxRect, EsxRect*, int)+272)
04-03 19:37:42.801: I/DEBUG(354):     #40 pc 0010ed67  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::PreserveBackBufferViaBlt(int)+126)
04-03 19:37:42.801: I/DEBUG(354):     #41 pc 001159a7  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::ProcessAndSubmitRendering(EsxFlushReason)+134)
04-03 19:37:42.801: I/DEBUG(354):     #42 pc 00177435  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::Flush(EsxFlushReason)+412)
04-03 19:37:42.801: I/DEBUG(354):     #43 pc 0017759d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::GetCmdSpace(EsxCmdBufType, unsigned int)+140)
04-03 19:37:42.801: I/DEBUG(354):     #44 pc 00173653  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBltHw(EsxBltCopy const*)+938)
04-03 19:37:42.802: I/DEBUG(354):     #45 pc 0017430d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBlt(EsxBltCopy const*)+132)
04-03 19:37:42.802: I/DEBUG(354):     #46 pc 0010d4fd  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::HwBlt(EsxBltCopy const*)+12)
04-03 19:37:42.802: I/DEBUG(354):     #47 pc 0010eb6b  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::Blt(EsxBltCopy const*)+10)
04-03 19:37:42.802: I/DEBUG(354):     #48 pc 0010ec81  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::BlitRect(EsxResource*, EsxResource*, EsxRect, EsxRect*, int)+272)
04-03 19:37:42.802: I/DEBUG(354):     #49 pc 0010ed67  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::PreserveBackBufferViaBlt(int)+126)
04-03 19:37:42.802: I/DEBUG(354):     #50 pc 001159a7  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::ProcessAndSubmitRendering(EsxFlushReason)+134)
04-03 19:37:42.802: I/DEBUG(354):     #51 pc 00177435  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::Flush(EsxFlushReason)+412)
04-03 19:37:42.803: I/DEBUG(354):     #52 pc 0017759d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::GetCmdSpace(EsxCmdBufType, unsigned int)+140)
04-03 19:37:42.803: I/DEBUG(354):     #53 pc 00173653  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBltHw(EsxBltCopy const*)+938)
04-03 19:37:42.803: I/DEBUG(354):     #54 pc 0017430d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBlt(EsxBltCopy const*)+132)
04-03 19:37:42.803: I/DEBUG(354):     #55 pc 0010d4fd  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::HwBlt(EsxBltCopy const*)+12)
04-03 19:37:42.803: I/DEBUG(354):     #56 pc 0010eb6b  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::Blt(EsxBltCopy const*)+10)
04-03 19:37:42.803: I/DEBUG(354):     #57 pc 0010ec81  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::BlitRect(EsxResource*, EsxResource*, EsxRect, EsxRect*, int)+272)
04-03 19:37:42.803: I/DEBUG(354):     #58 pc 0010ed67  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::PreserveBackBufferViaBlt(int)+126)
04-03 19:37:42.804: I/DEBUG(354):     #59 pc 001159a7  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxContext::ProcessAndSubmitRendering(EsxFlushReason)+134)
04-03 19:37:42.804: I/DEBUG(354):     #60 pc 00177435  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::Flush(EsxFlushReason)+412)
04-03 19:37:42.804: I/DEBUG(354):     #61 pc 0017759d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxCmdMgr::GetCmdSpace(EsxCmdBufType, unsigned int)+140)
04-03 19:37:42.804: I/DEBUG(354):     #62 pc 00173653  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBltHw(EsxBltCopy const*)+938)
04-03 19:37:42.804: I/DEBUG(354):     #63 pc 0017430d  /system/vendor/lib/egl/libGLESv2_adreno.so (EsxBltLib::CopyBlt(EsxBltCopy const*)+132)
04-03 19:37:43.285: I/AudioFlinger(357): BUFFER TIMEOUT: remove(4099) from active list on thread 0xb59c4000
04-03 19:37:43.381: W/ActivityManager(859):   Force finishing activity 1 com.xyz.myapp/.MainLandscape
04-03 19:37:43.382: I/DEBUG(354): Tombstone written to: /data/tombstones/tombstone_09
04-03 19:37:43.382: I/BootReceiver(859): Copying /data/tombstones/tombstone_09 to DropBox (SYSTEM_TOMBSTONE)
04-03 19:37:43.384: W/AudioTrack(4064): releaseBuffer() track 0xb491df80 disabled due to previous underrun, restarting
04-03 19:37:43.396: D/audio_hw_primary(357): out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2
04-03 19:37:43.446: I/Adreno(859): EGLInit: QTI Build: 01/29/15, 1bccc5d, I0ba6dce82d
04-03 19:37:43.452: I/WindowState(859): WIN DEATH: Window{10b6ffea u0 com.xyz.myapp/com.xyz.myapp.MainLandscape}
04-03 19:37:43.463: I/OpenGLRenderer(859): Initialized EGL, version 1.4
04-03 19:37:43.467: I/Zygote(377): Process 4064 exited due to signal (11)
04-03 19:37:43.479: I/ActivityManager(859): Process com.xyz.myapp (pid 4064) has died
04-03 19:37:43.513: V/ActivityManager(859): Display changed displayId=0
04-03 19:37:43.514: I/InputReader(859): Reconfiguring input devices.  changes=0x00000004
04-03 19:37:43.514: I/InputReader(859): Device reconfigured: id=5, name='atmel_mxt_ts', size 1440x2560, orientation 0, mode 1, display id 0
04-03 19:37:43.516: I/ActivityManager(859): Config changes=480 {1.0 ?mcc?mnc en_US ?layoutDir sw411dp w411dp h658dp 560dpi nrml port finger -keyb/v/h -nav/h s.9}
04-03 19:37:43.530: W/AudioPolicyManager(357): unregisterEffect() unknown effect ID 39
04-03 19:37:43.530: W/AudioFlinger(357): session id 36 not found for pid 4064
04-03 19:37:43.530: W/AudioFlinger(357): removeEffect_l() 0xb59c4000 cannot promote chain for effect 0xb5958d80
04-03 19:37:43.530: W/AudioPolicyManager(357): unregisterEffect() unknown effect ID 39
04-03 19:37:43.540: D/ImsConfigImpl(1308): onConfigurationChange
04-03 19:37:43.546: E/SurfaceFlinger(258): rejecting buffer: bufWidth=1792, bufHeight=728, front.active.{w=225, h=225}
04-03 19:37:43.562: E/SurfaceFlinger(258): rejecting buffer: bufWidth=1664, bufHeight=728, front.active.{w=225, h=225}
04-03 19:37:43.717: I/WindowManager(859): Screen frozen for +232ms due to Window{eccfac3 u0 com.android.systemui.ImageWallpaper}
04-03 19:37:45.792: I/art(859): Explicit concurrent mark sweep GC freed 16618(953KB) AllocSpace objects, 12(2MB) LOS objects, 30% free, 37MB/53MB, paused 1.137ms total 68.663ms
04-03 19:37:45.855: D/audio_hw_primary(357): disable_audio_route: reset and update mixer path: low-latency-playback speaker
04-03 19:37:45.856: D/audio_hw_primary(357): disable_snd_device: snd_device(2: speaker)

如有任何帮助,我们将不胜感激。 非常感谢。

最佳答案

到目前为止(甚至在 Android M 中)还没有针对图形驱动程序错误 (Adreno 420) 的错误修复,但我找到了解决该错误的方法。这绝对不是一个长期的解决方案,但目前它只是阻止应用程序崩溃的最佳选择。

我将图形层的数量减少到最少(扁平化了许多分层图形)

我禁用了特定图形层的 GPU 渲染。它会稍微减慢绘图速度,但影响不大。

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

在“软件”层中,如果需要,您仍然可以将特定 View 设置为“硬件”渲染。

view.setLayerType(View.LAYER_TYPE_HARDWARE, null);

关于Android Lollipop 5.1 : Fatal signal 11 (SIGSEGV), 代码 2,错误地址 0x9e985ff8 in tid 4093 (RenderThread)/当使用大量 9-patch 图形时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29437756/

相关文章:

android - 显示 png 时隐藏 1px 边距

java - 运行应用程序时无法合并 Dex 错误

android - 如何在 Jetpack Compose 中引用主题属性?

适用于其他平台的 Android 九补丁等效

java - Android 中使用 9 个补丁水平和/或垂直居中

android - Android WebView 中的 9 补丁图像

android - 损坏的默认背景,例如 EditText 或 TabLayout 和 Toolbar 中的按下状态

Android:在 ContentProvider 中调用自定义方法

android - Unity游戏无法上网

android - 两个 Listview(具有不同布局)只能与一个 customAdapter 一起使用吗?是否可以?