我遇到了奇怪的问题。为了使事情短:我写了一个Android应用程序,利用OpenCV的两个活动:Android + OpenCV上的SIGSEGV
活性1预览前置摄像头,并在用户点击启动活性2,通过意向发送当前帧的地址
活性2受让人它是给定地址下框架的Mat克隆类型的本地字段,并允许用户对其进行简单的操作(即在HSV色彩空间中执行inRange方法)。 Mat被转换为ImageView显示在ImageView中:这发生在Activity2开始(对于原始捕获帧)以及每个用户对SeekBar的操作之后。
Activity1是Activity2的父级,因此单击后退按钮将重新启动Activity1。 现在来怪异的一部分(S):一段时间后
1)(少于1分钟)活动1崩溃,与libc: Fatal signal 11 (SIGSEGV)
- 你可以想像,它不会发生在活性2是从来没有开始
2)如果我通过简单地返回到Activity1并再次单击来重新启动Activity2,则会调用OnCreate()和其他常规生命周期中的方法,并且在执行从Mat到Bitmap的转换时,应用程序会崩溃,同时发生相同的致命信号错误:
Utils.matToBitmap(mCapturedFrame, bm);
因此,这是第一次e重新启动活动后,OpenCV的函数被调用。最好的部分是,加载OpenCV库后,mCapturedFrame exsists和上述方法被称为。更重要的是,我释放()本地创建的Mats,以及包含捕获帧Mat的字段(当我从Activity2返回时)。在Activity1的情况下,该错误看起来像内存泄漏,但在哪里?
我真的不能看到我在这里做错了什么,并会很高兴的任何建议。随意从这里下载我的java代码文件:http://speedy.sh/RMPKH/thesis.zip
谢谢你的回答。对不起,我写这么晚了。不幸的是,我无法检查解决方案是否有效,但您分析它的方式似乎很好。 我已经通过禁用后退按钮功能处理了这个问题(我简单地从活动XML配置中删除了“父活动”属性)。 – przemulala