Drawable 引起的内在泄漏

Memory Leak經驗分享-Drawable篇

之前在網路上找到一段程式碼,
可以輕鬆的在Logcat裡看到目前已使用的記憶體(heap memory)量︰

?
1
Log.i("tag", where+"usedMemory: "+Debug.getNativeHeapSize()/ 1048576L);
開發時遇到有好幾個ListView在同一個Activity裡做切換時,
heap memory一直累計,
最後導致OOM(OutOfMemory)

今天總算是解決了這個問題。
從Romain Guy先前的 presentation裡了解到︰
Android最直接影響heap memory的元件是︰
1)Bitmap
2)Drawable

所以,如果ListView裡有用到這3種元件的話,
請小心記憶體的使用,
並且要做好記憶體回收的管控。

底下這裡特別為Drawable做一點介紹︰

Romain Guy説Drawable是一個非常有趣的東西。
當我們呼叫它時,
他的背後其實有這層關係︰
當我們今天Activity被onDestroy時,
Drawable被回收了,但⋯

我們發現,
因為Context還在被Drawable的Callback參照(reference),
因此,Context無法被回收。
如果我們又再次開啟Activity,
此時記憶體就會變成︰
因此,造成了記憶體累加,
也就是所謂的Memory Leak。

解決方法就是將Drawable的Callback,
在Activity的onDestroy()中設為null。
?
1
Drawable.setCallback(null);
以上是Romain Guy對於Memory Leak的介紹影片中提到的問題,
也剛好解決了手上案子遇到的難題,
在這邊跟遇到此問題的同好分享。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值