2011-12-05 61 views
3

我看到我的成長堆,我知道它會在任何設備上最終崩潰,因爲它只是不斷增長。Android的,我看到堆越來越大,但我希望它停止

Grow heap (frag case)

在我的手機上的日誌

看到它會崩潰的應用程序在使用32MB。當然,其他的手機將是16MB,如果有任何與運行Android 2.2

現在,很少有資源,我用我的位圖recycle(),設置東西向空,從複雜的數據結構彈出項,並使用System.gc()到調用垃圾收集,整個應用程序

但是,堆仍在壯大,它的一個問題...最終

如何正義的力量應用到轉儲資源,以便使其能夠繼續運作。

通常總是「位圖VM預算」超過,但是我感覺越來越多,我只是沒有獲得「明確位VM」命令

回答

16

我也掙扎了很多與這個問題。有很多事情你可以做。

  1. 可以撥打回收每個位圖,並將它們設置爲null。(bitmap.recycle()與relaese該位圖使用的所有內存,但不壞的位圖對象)。

  2. 您還可以解除與此link中指定的佈局關聯的drawables

  3. 您可以將您的hashmaps轉換爲WeakHashmaps。所以當系統內存不足時它的內存會變得更加複雜。

  4. 你可以調整你所有的位圖。看看這個l ink.

  5. 可以覆蓋在活動onLowMemory()方法時,整個系統運行內存不足它得到一個電話。你可以在那裏發佈很少的資源。

  6. 你可以使你的對象SoftReferenceWeakreference,以便它們在內存不足的情況下釋放。

但真正的事實是,這一切可延緩你的記憶問題/崩潰了,但不能消除它,因爲事情是,你必須在某個地方泄露你的活動情境或內存。

+1

堆,當我打電話camera.takePicture,在回調和我的savephoto異步任務之間的增長。我看對什麼事都釋放了,但什麼是真正歸結爲是,建立在拍攝照片按鈕 – CQM

+1

你可能在其他地方泄漏內存。 –

+0

我有一項活動,我將如何泄漏上下文?每一個地方我關閉活動我使用System.exit(0),以真正確保其關閉 – CQM

相關問題