0

我正在運行一堆圖像過濾器,似乎遇到了一些內存問題。Android位圖內存使用

在我使用這麼多內存的圖像處理的開頭:

GC_FOR_MALLOC freed 3K, 45% free 3237K/5831K, external 47586K/49634K, paused 17ms 

在結束我非常使用這個(畢竟處理完成):

GC_EXTERNAL_ALLOC freed 5K, 16% free 16056K/18951K, external 51430K/52196K, paused 23ms 

後,我我完成每個位圖,我把它設置爲回收併爲空:

someBitmap.recycle(); 
someBitmap = null; 

還有什麼我笑他們會對他們做些什麼?是否有任何清理我應該做的帆布正在使用?

而且我的過濾器對象實例,如:

BoxBlurFilter blurFilter = new BoxBlurFilter(); 

有什麼我應該做的,以釋放他們?在iOS中分配「新」的內存我負責免費。

對於瑣碎的內存管理問題感到抱歉,但我對Android開發頗爲陌生,事情與iOS截然不同。

謝謝!

編輯2,我刪除了我的完整過濾器代碼。

+0

這絕對不同,這實際上是Android中常見的棘手的內存管理問題之一。你可以發佈更多的代碼,以便我們可以看到發生了什麼?有一些*(非常罕見)的情況下調用'System.GC()'是必要/有用的。 – kabuko

+0

謝謝kabuko。我嘗試添加System.GC()後,每個位圖設置爲null,似乎沒有幫助。我會嘗試發佈一些僞代碼或其他東西。 –

回答

-1

所以設置濾波器實例爲null,所有的字節數組爲空(在上面,並在過濾器對象的代碼)我現在有大約相同的尺寸堆如我以前那樣我運行過濾器後:

GC_EXPLICIT freed 5126K, 77% free 3243K/13703K, external 51430K/53478K, paused 18ms 

這意味着它從16mb使用到3.2mb。好多了!

所以我想我的問題的答案是確保你設置爲空,如果你想它被釋放。