【发布时间】:2014-02-05 20:18:16
【问题描述】:
也许我对不同信号的致命错误很幸运。今天是这样的:
02-05 20:57:21.827: D/MY_TEST_MESSAGE(4349): Engine.onVisibilityChanged()
02-05 20:57:21.827: D/MY_TEST_MESSAGE(4349): DrawTask #3 is created!
02-05 20:57:21.827: D/MY_TEST_MESSAGE(4349): DrawTas #3 is working!
02-05 20:57:21.837: I/brcm-gr(4349): [gralloc_lock]: new usage 0x903
02-05 20:57:21.837: I/brcm-gr(4349): [gralloc_lock]: new usage 0x930
02-05 20:57:21.877: I/brcm-gr(4349): [gralloc_lock]: new usage 0x933
02-05 20:57:21.927: D/dalvikvm(4349): GC_FOR_ALLOC freed 1519K, 18% free 20612K/25095K, paused 31ms, total 31ms
02-05 20:57:21.987: I/brcm-gr(4349): [gralloc_lock]: new usage 0x933
02-05 20:57:22.257: D/MY_TEST_MESSAGE(4349): Engine.onVisibilityChanged()
02-05 20:57:22.347: I/brcm-gr(4349): [gralloc_lock]: new usage 0x933
02-05 20:57:22.427: I/brcm-gr(4349): [gralloc_lock]: new usage 0x903
02-05 20:57:22.427: I/brcm-gr(4349): [gralloc_lock]: new usage 0x930
02-05 20:57:22.447: I/brcm-gr(4349): [gralloc_lock]: new usage 0x933
02-05 20:57:22.497: D/MY_TEST_MESSAGE(4349): Engine.onSurfaceDestroyed()
02-05 20:57:22.507: D/MY_TEST_MESSAGE(4349): Engine.onDestroy released
02-05 20:57:22.517: D/MY_TEST_MESSAGE(4349): WallpaperService.onDestroy()
02-05 20:57:22.627: D/dalvikvm(4349): GC_FOR_ALLOC freed 1510K, 18% free 20619K/25095K, paused 18ms, total 19ms
02-05 20:57:22.627: I/dalvikvm-heap(4349): Grow heap (frag case) to 25.673MB for 5242896-byte allocation
02-05 20:57:22.657: D/dalvikvm(4349): GC_CONCURRENT freed 8K, 16% free 25731K/30279K, paused 3ms+3ms, total 23ms
02-05 20:57:22.727: A/libc(4349): Fatal signal 11 (SIGSEGV) at 0x52905020 (code=2), thread 4376 (AsyncTask #3)
这个日志 sn-p 告诉我,当我尝试使用实际上被 onSurfaceDestroyed() 方法销毁的 SurfaceHolder 时,可能发生了错误。
这种状态的用例是:
- 开始我的动态壁纸
- 按下设置按钮
- 更改任何设置(或不更改 - 相同的行为)并按返回
- 立即再次按返回
- 发生错误
那么,(4) 和 (5) 之间是什么关系? 主要的一点是,在设置屏幕上按下返回后,onVisualChanged() 方法会调用预设动画以使用可用的支架更改图像和画布,但下一个立即按下 Back 会调用 onSurfaceDestroyed() 方法,使持有人被销毁。
@“这只是我可以重现上述错误的一种情况。”
@"如果第二次按下返回将接近状态动画完成不会发生错误"
所以,我的问题是:
- 是否有任何技术可以处理或防止出现的错误?
- 如何说我的 DrawTask 持有人不可用并且应该停止动画?
- 或者,可能还有其他原因导致此错误?
【问题讨论】:
-
我没有足够的信息来完全回答你的问题。但是我可以回答第 1 点。没有办法处理致命信号。这是底层 C++ 库引发的错误,通常但不总是由应用中损坏或不受支持的媒体引起。
标签: android android-asynctask fatal-error live-wallpaper segmentation-fault