Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
来源:互联网 发布:软件系统培训方案 编辑:程序博客网 时间:2024/05/17 23:57
分类: android thread2013-07-01 18:43 15919人阅读 评论(7) 收藏 举报
android多线程
异常出现频率:非必现,乍看不可捉摸。
BUG导致:应用程序崩溃,过一小会儿会自动退出。
Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
遇到这个问题很无奈,但是经过不断探索终于找到了问题的原因!!!
这个问题非常不给面子,居然在给上级演示程序的时候突然崩坏! 哭哭哭!!!NND看老子一会儿怎么治你!!!
这个是典型的多线程引起的问题,
我当时的应用场景是:
SurfaceView里面有一个Bitmap成员变量
而我们都知道SurfaceView里面的绘图方法是在一个新开的线程里面执行的,在这个绘图方法里,会执行把Bitmap绘制到Canvas上面的操作
当我点击一个按钮的时候,可能会改变Bitmap的引用,指向另外一张处理完成的图片,这个时候Bitmap这个成员变量会被我recycle(),释放掉。
问题就在这里了,我在recycle这个Bitmap的时候,也许Thread中正在执行把Bitmap绘制到Canvas上的操作,可能刚好正在执行当中,或者执行了一半,而GC毫不留情地把这个Bitmap请上了天堂,就这样,Java调用底层的API当中就突然发生了Error,因此这个问题才没有任何的Java异常提示。
解决问题的办法就是:
1. 在SurfaceView的按钮点击事件里用到Bitmap的地方改写代码:
- Bitmap bmp = null;
- synchronized(mBmp)
- {
- bmp = mBmp;
- mBmp = filter(bmp);
- }
- // 释放
- if(bmp.isRecycled() == false)
- {
- bmp.recycle();
- bmp = null;
- System.gc();
- }
2. 在SurfaceView的Thread当中改写代码:
- synchronized(mBmp)
- {
- // ...
- canvas.drawBitmap(mBmp, mMatrix, null);
- }
OK!烦恼不再!啤酒一杯~
0 0
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4358 (CameraPreviewTh)问题解决
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
- Linphone Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
- 打开百度地图报 Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)错误
- canvas.drawText 发生 Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
- WebView 报 Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 3777 (WebViewCoreThre)
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 16169 (Thread-1035)
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 1755 (CrBrowserMain)问题
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 629 (example.testpro)
- Android Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread
- A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 25427 (pool-1-thread-2)
- android native开发 错误信息定位:Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4785 (XXX)
- FFmpeg Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 23518,一个空格引发的血案
- Fatal signal 11 (SIGSEGV) at 0x390955ae (code=1)
- 有时间了研究一下 这个oops 有人知道的话,求指导!!
- Smart Pointers in C++
- 拼写纠错-百度笔试
- 迈向开源的第一步:github
- 百度20050/6/07近三年的笔试题(附答案)
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
- 大数据相关
- 级回复该十多天
- cocos2dx fatal signal11(SIGSEGV) at 0x00000000(code=1)的解决实践
- struct和typedef struct的用法解析
- 通知栏点击通知后,Intent开启activity产生的问题
- 在Ubuntu上安装Oracle JDK
- 如何在Mac OSX 中制作dylib和使用dylib
- webservice编程基础