Listview异步加载缓存图片,解决快速滑动问题
2013-06-09 10:31
501 查看
搜了大量资料见的大多避免oom的方法有压缩和缓存,这里也采用这2种方法吧。 压缩就不用我说了,缓存图片我用的LruCache这个类,本身已经实现了同步,这里就不再多说什么了,不知道的同学可以去研究下,这里主要想讲的的异步加载的时机。在这里写下也只是分享下我的体验,欢迎拍砖~~~ 大家做过这个的都碰到过,快速滑动时由于大量异步加载和message消息的等待排队,当快速滑动停止时要等好一会才能轮到当前可视item图片的加载显示,如何避免这个问题? 那就从问题来源入手:快速滑过的那些item图片可以先暂不加载,等到用户正常划过时再去加载不迟~~~ 我的代码思路:在getView方法里面判断Listview的滑动状态,如果正在滑动,则不加载,但要保存此时的图片信息,等到适当机会再去加载,否则异步加载图片~~~ 实现Listview状态的标识,代码: ? 现在知道了当前listview的滚动状态,那么现在就开始在getview里面加载资源吧: ? 那回过头来看上面出现过的asyncLoading()这个方法吧 ? 总之,demo实现了这样一个效果,每个item的图片都属于自己,没有重用(因为同一张图片每次都是重新加载到内存的),当正常滑动listview时,则正常加载图片,当快速滑动时,只加载listview停下后可视item的图片,这就避免了等待啦,因为之前被滑过item的图片没有被异步加载哦~~欢迎提出意见,大家一起学习~~~ 当然,真正的应用是不只在getview方法里面去加载的,因为滑动过后才会去加载,体验效果会很差,这里只是学习用 存在错位bug: 你会发现有时同一张图片会连续变动1、2次,甚至更多次,那是因为convertView缓存的缘故, 比如消息队列中有消息要通知刷新position=10,16,22这3个图片的位置,而这三个item恰好使用同一个convertView,所以他们也是使用的同一个ImageVIew 此时position=22的item是可视的 那么这个ImageVIew.setImageBitmap()的方法会被连续调用3次 导致你们会看到图片连续变动 这个bug在本demo中很好解决,2个方法: 1:就是判断当前可视的item位置再去设 2:在手动发送message之前清空消息队列(这种方法适合于一定要是非常快速滑动的那种,因为listview稍微滑下就会处于busy状态,此时正常加载的position还是可视的) 提出问题:如果一开始就去加载全部图片后缓存,而不是在getview里面开线程去加载图片,那么如何通知到对应的图片UI更新以及错位呢?这过程会发生什么问题?你可以亲自动手实现下,提醒下加载图片是耗时的哦~~~ tip:我自己碰到了message消息过期的问题,正在解决中。。 奉上代码:主要是图片大,代码就一个类 |
![](http://www.eoeandroid.com/static/image/filetype/rar.gif)
BitmapCache.rar
相关文章推荐
- Listview异步加载缓存图片,解决快速滑动问题
- Listview异步加载缓存图片,解决快速滑动问题
- ListView异步加载图片--图片缓存和错位问题解决方案
- 解决ListView滑动时卡的问题,实现异步加载图片解决
- 解决ListView滑动时卡的问题,实现异步加载图片解决 .
- 解决ListView滑动时卡的问题,实现异步加载图片解决
- Listview 异步加载图片 快速滑动发生图片错误的解决办法 复用convertview
- ListView异步加载图片--图片缓存和错位问题解决方案
- ListView异步加载图片--图片缓存和错位问题解决方案
- 解决ListView滑动时卡的问题,实现异步加载图片解决
- android中ListView异步加载图片时的图片错位问题解决方案(1)
- ListView优化使用imageLoader下载和缓存图片,图片异步加载,解决图片多了之后容易卡顿。
- Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法
- android listview 异步加载图片时出现图片错位、刷新问题的简单解决
- 解决ListView异步加载图片错乱问题
- 解决ListView异步加载图片错乱问题 .
- listView convertView缓存机制 & 异步加载图片 问题剖析
- 解决ListView异步加载图片错乱问题
- Android开发教程--listview异步加载图片错位问题解决
- 解决ListView异步加载图片错乱问题