listview原理及优化

本文探讨了在使用GridView展示大量图片时如何通过优化图片下载策略和内存管理,实现性能提升。具体包括减少findviewbyid的时间、利用ViewHolder重用机制、仅在GridView静止时下载图片以及在退出Activity后取消所有下载任务等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理

OnMeasure

常用优化

convertview

ViewHolder

减少findviewbyid的时间,viewHolder也是会被重用的

高级优化

仅当GridView静止时才去下载图片,GridView滑动时取消所有正在下载的任务

下载的任务应该由onScrollStateChanged里调用,但首次进入程序时onScrollStateChanged并不会调用


问题

http://www.cnblogs.com/lesliefang/p/3619223.html提到重用了 convertView 且有异步操作会导致图片错位

解决方案,加tag,他的方法在ImageView加一个Tag,

我的方法在ViewHolder里加一个id

问题

同一个 URL 请求的重复发送,退出 activity 后队列中请求的 cancel

问题

现LRUCache并不不会释放内存,因为LRUCache的entryRemoved方法默认不会对bitmap做recycle操作,只是在cache里没有索引了,bitmap还留存在内存中,而Imageview还持有对bitmap的引用,因此GC不会回收它,内存并没释放。而你的GridView中内存之所以没有增加,是因为GridView会重用之前的ImageView, 而ImageView重新setImageBitmap, 就释放掉了对之前bitmap的引用,之前的bitmap就会被回收,因此能保持内存的不变,再多的图片也不会挂

问题

http://stackoverflow.com/questions/10743381/when-should-i-recycle-a-bitmap-using-lrucache

When you are done with a Bitmap (e.g., row in a ListView is recycled), you check to see if it is still in the cache. If it is, you leave it alone. If it is not, you recycle() it

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值