【发布时间】:2016-06-23 23:47:39
【问题描述】:
我遇到了奇怪的问题。简而言之:我编写了一个使用 OpenCV 和两个活动的 Android 应用程序:
Activity1预览前置摄像头并在用户点击时启动Activity2,通过Intent发送当前帧的地址
Activity2 将给定地址下帧的Mat clone 类型的本地字段分配给它,并允许用户对其进行简单操作(即在HSV 颜色空间中执行inRange 方法)。 Mat 被转换为位图并显示在 ImageView 中:这发生在 Activity2 开始(对于原始捕获的帧)和每次用户操作 SeekBar 之后。
Activity1 是 Activity2 的父级,因此单击后退按钮会重新启动 Activity1。 现在是奇怪的部分:
1) 一段时间后(不到 1 分钟)Activity1 崩溃,libc: Fatal signal 11 (SIGSEGV)- 你可以想象,当 Activity2 从未启动时它不会发生
2) 如果我通过简单地返回到 Activity1 并再次单击来重新启动 Activity2,则会调用常规生命周期中的 OnCreate() 和其他方法,并且当执行从 Mat 到 Bitmap 的转换时,应用程序会崩溃并出现相同的致命信号错误:
Utils.matToBitmap(mCapturedFrame, bm);
所以,这是 OpenCV 的函数在重新启动 Activity 后第一次被调用。最好的部分是,mCapturedFrame 存在并且上述方法在加载 OpenCV 库后调用。更重要的是,我 release() 本地创建的 Mats,以及包含捕获帧 Mat 的字段(当我从 Activity2 返回时)。该错误看起来像是 Activity1 的内存泄漏,但在哪里?!
我真的看不出我在这里做错了什么,并且很高兴有任何建议。随意从这里下载我的 java 代码文件:http://speedy.sh/RMPKH/thesis.zip
【问题讨论】:
标签: android opencv bitmap segmentation-fault