perhapse我很幸运在不同信号上的致命错误。今天,这就是以下内容:
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)
此日志片段说我,当我尝试使用实际被onsurfacedestroyed()方法破坏的表面持有人时,可能发生了错误。
这种状态的用例是:
- 开始我的实时壁纸
- 按设置按钮
- 更改任何设置(或不更改 - 相同的行为),然后按向后
- 立即再次压向后
- 发生错误
那么,(4)和(5)和(5)?之间的台阶是什么,要点是,在设置屏幕上按下onvisualChanged()方法后,使用可用持有人来更改图像的预设动画和帆布,但接下来立即按向后拨打弹奏式()方法,使持有人被摧毁。
@"这只是我可以在上面有错误的情况下复制的一种情况。"
@"如果第二次压接近状态动画完成",则不会发生错误
所以,我的问题是:
- 是否有任何技术可以处理或预防发生错误?
- 我怎么能说我的drawtask不可用,并且应该停止动画?
- 或,可能还有另一个错误的原因?
不确定,它是否以正确的方式完成,但目前我通过添加三秒钟的睡眠来解决问题。因此, onsurfacedestroyed()已更改为:
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);
Log.d("MY_TEST_MESSAGE", "Engine.onSurfaceDestroyed()");
try{
Thread.currentThread().sleep(500);
}
catch(Exception ie){ }
mVisible = false;
if (myDrawTask != null) {
myDrawTask.cancel(false);
}
}
它没有任何意外延迟。