图片加载涉及到图片的缓存、图片的处置、图片的显示等。而随着市面上电话设备的硬件水平飞速进展,对图片的显示要求愈来愈高,略微处置不行就会造成内存溢出等问题。很多软件厂家的通用做法确实是借用第三方的框架进行图片加载。 开源框架的源码仍是挺复杂的,但利用较为简单。大部份框架其实都差不多,配置略微麻烦点,可是利历时一样只需要一行,显示方式一样会提供多个重载方式,支持不同需要。如此会减少很没必要要的麻烦。同时,第三方框架的利用较为方便,这大大的减少了工作量、提高了开发效率。本文要紧介绍四种经常使用的图片加载框架,别离是Fresco、ImageLoader、 Picasso、 Glide,包括他们各自的优缺点、利用步骤等等。
第一看 Fresco, Fresco 是 Facebook 推出的开源图片缓存工具,要紧特点包括:两个内存缓存加上 Native 缓存组成了三级缓存,支持流式,能够类似网页上模糊渐进式显示图片,对多帧动画图片支持更好,如 Gif、WebP。它的优势是其他几个框架没有的, 或说是其他几个框架的短板。
优势: 1. 图片存储在安卓系统的匿名共享内存, 而不是虚拟机的堆内存中, 图片的中间缓冲数据也寄存在本地堆内存, 因此, 应用程序有更多的内存利用, 可不能因为图片加载而致使oo
m, 同时也减少垃圾回收器频繁挪用回收 Bitmap 致使的界面卡顿, 性能更高。 2. 渐进式加载 JPEG 图片, 支持图片从模糊到清楚加载。 3. 图片能够以任意的中心点显示在 ImageView, 而不单单是图片的中心。 4. JPEG 图片改变大小也是在 native 进行的, 不是在虚拟机的堆内存, 一样减少 OOM。 唐笑笑扮演者5. 专门好的支持 GIF 图片的显示。
缺点: 1. 框架较大, 阻碍 Apk 体积 2. 利用较繁琐
利用步骤: 1. 引入 Fresco,包括两种方式,在线和离线。 在线引入依托脚本形式,在dependencies中添加依托,
compile ''
引入离线引入,需要导入的arr包较多,包括:
compile(name: '', ext: 'aar')
compile(name: '', ext: 'aar')
宁夏 旅游compile(name: '', ext: 'aar')
compile(name: '', ext: 'aar')
何超莲回应分手传闻compile files('libs/')
查物流货到哪里了 上面提到的aar其实确实是lib module紧缩包的形式,包括.class和相关的资源文件,平常利用的jar仅仅包括.class文件。利用aar包时,还需要来到project ``里面, 在allprojects方式体加入
allprojects {
repositories {
jcenter()
需要在程序入口方式里面进行初始化。在oncreate方式中添加初始化语句。
形容观众多的成语(context);
3. 在布局文件中,需要利用图片展现地址,利用它概念的控件
< android:id="@+id/iv_img"
android:layout_width="150dp"
android:layout_height="150dp"
邹宗胜 android:src="@mipmap/ic_launcher"
fresco:fadeDuration="300"
fresco:roundingBorderColor="#ccc"
fresco:roundingBorderWidth="2dp"/>
4.设置静态图片,在代码中具体写如下代码
设置gif图片,在代码中具体写如下代码
DraweeController gifController = ().setUri(uri)
.setAutoPlayAnimations(true).build();
ImageLoader是比较老的框架,是github社区上star最多的一个项目,能够明白得为点赞最多滴,应该是最出名的一个国内很多知名软件都用它包括淘宝京东聚划算等等。整个库分为 ImageLoaderEngine,Cache 及 ImageDownloader,ImageDecoder,BitmapDisplayer,BitmapProcessor 五大模块,其中 Cache 分为 MemoryCache 和 DiskCache 两部份。简单的讲确实是 ImageLoader 收到加载及显示图片的任务,并将它交给 ImageLoaderEngine,ImageLoaderEngine 分发任务到具体线程池去执行,任务通过 Cache 及 ImageDownloader 获取图片,中间可能通过 BitmapProcessor 和 ImageDecoder 处置,最终转换为Bitmap 交给 BitmapDisplayer 在 ImageAware中显示。特点是稳固, 加载速度适中, 缺点在于不支持GIF图片加载, 利用略微繁琐, 而且缓存机制没有和 http 的缓存专门好的结合, 完满是自己的一套缓存机制。利用比较简单,那个框架的github主页上也有快速利用的步骤,大体上确实是在application类里的oncreate方式(整个程序开始时运行一次)中进行一下简单的大体配置,能够依照需要自行进行设定,懒得设定的话框架也提供了一个默许的配置,挪用一个方式即可。大体上是配置一些类似于:缓存类型啊,缓存上限值啊,加载图片的线程池数量啊等等。另外在页面内显示的时候还要设置一个显
示配置那个配置不同于大体配置,一个项目里能够依照需要创建多个配置对象利用,那个配置就比较具体了,能够设置是不是利用disk缓存(存到sd卡里一样),加载图片失败时显示的图片,默许图片,图片的彩样式等。ImageLoader和Volley图片部份还包括其他大部份图片框架,大体上图片处置都差不多,区别仅在于部份优化了,而优化方面UIL即Universal-Image-Loader框架做的最好,配置好以后,确实是简单的利用了,创建一个图片加载对象,然后一行代码弄定显示图片功能。参数一样是入你需要显示的图片url和imageview对象。 优势: 1.支持下载进度监听 2.能够在 View 转动中暂停图片加载,通过 PauseOnScrollListener 接口能够在 View 转动中暂停图片加载。 3.默许实现多种内存缓存算法 这几个图片缓存都能够配置缓存算法,只是 ImageLoader 默许实现了较多缓存算法,如 Size 最大先删除、利用最少先删除、最近最少利用、先进先删除、时刻最长先删除等。 4.支持本地缓存文件名规那么概念
发布评论