我遇到了奇怪的問題。爲了使事情短:我寫了一個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