2011-12-30 52 views
2

我開發了一個使用共享庫的小應用程序。當我在設備中運行該應用程序時,堆內存正在迅速增加。我試圖減少使用gc(),但這不適合我。有一次,我收到一條消息,如低內存不再有後臺進程,我的應用程序退出。我怎麼解決這個問題?在android中處理內存泄漏

+0

是否有其分配的內存/資源任何循環,創建一個類的新實例?請顯示這樣的循環代碼 – sll 2011-12-30 12:46:28

+0

其實它是一個動態壁紙應用程序。在那裏加載一個視頻文件作爲壁紙,爲此,我在jni代碼中使用ffmpeg編譯該視頻文件,並使用opengl繪製壁紙。在jni文件中使用av_malloc函數。 – Satheesh 2011-12-30 13:20:16

+0

任何循環? – sll 2011-12-30 14:18:40

回答

1

您不僅要使用GC,還要刪除對不再需要的對象的引用 - GC將不會回收引用的對象。您還可以小心翼翼地使用JNI庫,並在分配啓動線程的內存時採取必要的預防措施。

更詳細的答案是不posssible,直到你說你用的是什麼,並張貼源

+0

其實它是一個動態壁紙應用程序。在那裏加載一個視頻文件作爲壁紙,爲此,我在jni代碼中使用ffmpeg編譯該視頻文件,並使用opengl繪製壁紙。 – Satheesh 2011-12-30 13:18:13

+0

真的需要手動刪除引用嗎?我相信,自從執行移出引用聲明範圍以來,引用將被自動銷燬。 – sll 2012-01-01 20:24:36

+0

這取決於。執行範圍與它無關。在onPause()之後的某個時候,android框架會放棄對您的活動的引用並使其可用於垃圾回收(並且由活動​​持有的引用將依次丟棄適合對象的資源...)但是,是否存儲了對某些靜態活動的引用變量(常見錯誤,因爲活動也是在任何地方都需要的上下文),它根本不會被回收,所有的參考資料永遠堵塞你的記憶 – 2012-01-02 08:45:13