android Gridview图片异步加载的要领

泡在网上的日子 / 文 发表于2014-09-19 11:37 次阅读 异步加载

  关于GridView或者是ListView异步加载图片的文章数不胜数,总结起来就是:

1.高效率的缓存机制(文件缓存和LruCache并用)

2.图片的压缩方式,尽可能节省内存

3.UI刷新的频率

   其中第三点,UI刷新的频率指的是在滑动过程中,当图片加载完,ImageView都会有setImageBitmap这种更新UI的事件,如果在同一时间内有好几个线程同时完成图片的加载,由于是在滚动过程中,会造成轻微的卡顿。

   解决的办法一般是在滑动的时候暂停加载,当滑动停止再继续完成加载,或者是滑动比较快的时候暂停加载,滑动慢下来了再去加载,我比较喜欢第二种,不过你需要得到这个滑动速度,如何获得请看这篇文章:

如何获得ListView当前的滚动速度

   但是还有一点被忽略的是开启的线程数目其实也会影响到这个流畅度,线程数目并不是越多越好,如果一下子开启了50个线程,那么这50个线程如果完成时间差别不大,也会导致UI刷新频率过高。一般我们使用线程池来管理线程的数目。过多的线程数目不仅会直接导致cpu负载过高,还会因为UI刷新频繁影响UI线程的流畅性。

   实际上,一般线程池的数目在小于5比较合适,而且我还发现如果线程数目在3以下,上面提到的滑动比较快的时候去暂停加载这个方案是可以弃用的,因为线程数目较少(比如线程池大小为2),滑动再快同时也只会刷新两张图片。所以最好的解决方案是采用容量较小的线程池,同时不再考虑滚动(或者滚动过快)时是否加载的问题,如果你还是一定要考虑,那暂停加载的时机也最好是速度较大的时候。总之在线程池数目与暂停加载之间找到一个平衡点吧。



收藏 赞 (1) 踩 (5)
上一篇:GridView异步加载中一次加载完所有数据问题的解决以及其原因分析
今天在开发一个相册应用的时候遇到一个很奇怪的问题,用于显示照片的GridView在显示的时候,初次加载,getView就被调用了1000次,而我的所有图片也只有1000张,也就是说在还没有滚动的情况下GridView就已经把所有的数据显示完了(当然超出屏幕的是看不见的)
下一篇:Android 自定义RecyclerView 实现真正的Gallery效果
Google官方最近新增加的RecyclerView,据说是ListView的升级版本,本篇博客,首先介绍RecyclerView的用法,然后经行一定的分析;最后自定义一下RecyclerView实现我们需要的相册效果。 1、RecyclerView的基本用法 首先主Activity的布局文件: RelativeLayout