博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
阅读量:6564 次
发布时间:2019-06-24

本文共 865 字,大约阅读时间需要 2 分钟。

异常出现频率:非必现,乍看不可捉摸。

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!

你可能感兴趣的文章
boost 线程、互斥体、条件变量
查看>>
shell截取字符串方法
查看>>
神经网络:卷积神经网络CNN
查看>>
Tomcat指定特定JDK版本
查看>>
objc’s category and class cluster 详解
查看>>
早上没馒头
查看>>
持续集成之路——Maven
查看>>
C#方法参数传递-同时使用ref和out关键字
查看>>
Java日期时间使用总结
查看>>
Swift互用性:采用Cocoa设计模式(Swift 2.0版)-b
查看>>
C++文件输入和输出
查看>>
【转】android开发工具Eclipse,androidStudio,adt网盘下载--不错
查看>>
Date日期操作
查看>>
Linux sticky bit 目录权限 rwt权限
查看>>
iphone XCode调试技巧之EXC_BAD_ACCESS中BUG解决
查看>>
UVA 11983 Weird Advertisement
查看>>
linux下批量替换文件内容
查看>>
Linux 网卡驱动相关——03
查看>>
GNU make manual 翻译( 一百二十一)
查看>>
【配置映射】—Entity Framework实例详解
查看>>