如何处理或防止致命错误"Fatal signal 11 (SIGSEGV)"



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()方法破坏的表面持有人时,可能发生了错误。

这种状态的用例是:

  1. 开始我的实时壁纸
  2. 按设置按钮
  3. 更改任何设置(或不更改 - 相同的行为),然后按向后
  4. 立即再次压向后
  5. 发生错误

那么,(4)和(5)和(5)?之间的台阶是什么,要点是,在设置屏幕上按下onvisualChanged()方法后,使用可用持有人来更改图像的预设动画和帆布,但接下来立即按向后拨打弹奏式()方法,使持有人被摧毁。

@"这只是我可以在上面有错误的情况下复制的一种情况。"

@"如果第二次压接近状态动画完成",则不会发生错误

所以,我的问题是:

  1. 是否有任何技术可以处理或预防发生错误?
  2. 我怎么能说我的drawtask不可用,并且应该停止动画?
  3. 或,可能还有另一个错误的原因?

不确定,它是否以正确的方式完成,但目前我通过添加三秒钟的睡眠来解决问题。因此, 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);
        }
    }

它没有任何意外延迟。

相关内容

  • 没有找到相关文章

最新更新