可以輕鬆的在Logcat裡看到目前已使用的記憶體(heap memory)量︰
1
|
Log.i("tag", where+"usedMemory: "+Debug.getNativeHeapSize()/ 1048576L);
|
heap memory一直累計,
最後導致OOM(OutOfMemory)
今天總算是解決了這個問題。
從Romain Guy先前的 presentation裡了解到︰
Android最直接影響heap memory的元件是︰
1)Bitmap
2)Drawable
所以,如果ListView裡有用到這3種元件的話,
請小心記憶體的使用,
並且要做好記憶體回收的管控。
底下這裡特別為Drawable做一點介紹︰
Romain Guy説Drawable是一個非常有趣的東西。
當我們呼叫它時,
他的背後其實有這層關係︰
Drawable被回收了,但⋯
我們發現,
因為Context還在被Drawable的Callback參照(reference),
因此,Context無法被回收。
如果我們又再次開啟Activity,
此時記憶體就會變成︰
也就是所謂的Memory Leak。
解決方法就是將Drawable的Callback,
在Activity的onDestroy()中設為null。
1
|
Drawable.setCallback(null);
|
也剛好解決了手上案子遇到的難題,
在這邊跟遇到此問題的同好分享。