我正在編寫一個Android應用程序,允許在對數據執行某些信號處理時播放錄製的文件。Android:OutOfMemory在重新開放活動的應用程序中發生異常
從列表視圖中選擇一個文件,這將啓動播放和處理髮生的新活動。在onBackPressed方法中,我調用finish來結束活動並返回到列表視圖,用戶可以在其中選擇另一個文件。
一次選擇一個小文件或一個大文件時,一切正常,但是當再次選擇一個大文件時,會拋出OutOfMemoryError異常。
我已經使用DDMS來查看我的內存堆,並且很明顯,返回到列表視圖時,活動的內存不會被釋放。它基於正在加載的文件的大小累積。
儘管進行了大量的研究,我無法確定內存泄漏的來源。我已將Bitmap和Context參考視爲原因,但這些似乎不成問題。文件加載本身也不會出現問題,因爲我有另一個類似的活動,使用從麥克風獲取的實時音頻。
1)什麼可能是內存泄漏的原因?
2)如何確保在完成/ ondestroy被調用時釋放一個活動的內存。
當您完成活動時,您是否明確地關閉了文件? –
咋,我關閉文件(很確定文件本身不是問題)。我創建了一個簡單的測試應用程序,我所做的就是加載一個新的活動並填充大量數據(一個大型浮動500萬元素)。 OnBackPressed我打完了。這也導致類似的內存不足異常,在這種情況下調用system.gc可以解決問題。但在我的實際應用系統中,似乎沒有相同的效果。我知道system.gc不是一個指令,而是一個建議。 – user2819360
完成活動而不關閉文件/數據庫/端口等你打開的東西。 –