引爆你的图片浏览, ListView 大图片


之前发现,ListView里面的图片资源越占越大,特别是当列表载入的图片相当大的时候,比如微博的中等图片大小,就非常难受.而log也可以看出,是图片没有回收,尽管相关的View已经不使用了,这就是doc里面说的内存泄露了.

因为ImageView里面关联着Bitmap.导致Bitmap没有办法释放,所以尽管ListView只是展示一部分内容(当前可见的部分),其它部分却没有办法回收.

还好,在AbsListView里面提供了一个RecyclerListener接口,客户端覆盖这个接口中的方法,手动回收Bitmap,就可以了.
默认这个不处理什么东西的.

@Override
public void onMovedToScrapHeap(final View view) {}
这个方法名可以看出是将View移入待回收区,
但是由于引用的问题,虚拟机无法在第一时间回收,要等到所有的引用都无效了.才会回收

如我在微博程序中的:
TagsViewGroup tagsViewGroup=itemView.mTagsViewGroup;
if (null!=tagsViewGroup) {
tagsViewGroup.setAdapter(null);
tagsViewGroup.removeAllViews();
}
将View清空了,就可以回收Bitmap了.

这一点很重要,当然还可以处理TextView,等占用资源多的View的回收,对于一个列表来说,加载大图,用这样的方法释放就可以了.
monitor里面heap测试,大约是在25m以内,而heapsize=64m的手机.
这样就可以避免以前在32m heap中配置中出现oome了.


引爆你的图片浏览,亮瞎你的眼睛.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值