Android培训教程常见图片加载框架

Android培训教程常见图片加载框架

2023年6月28日发(作者:)

图片加载涉及到图片的缓存、图片的处置、图片的显示等。而随着市面上电话设备的硬件水平飞速进展,对图片的显示要求愈来愈高,略微处置不行就会造成内存溢出等问题。很多软件厂家的通用做法确实是借用第三方的框架进行图片加载。 开源框架的源码仍是挺复杂的,但利用较为简单。大部份框架其实都差不多,配置略微麻烦点,可是利历时一样只需要一行,显示方式一样会提供多个重载方式,支持不同需要。如此会减少很没必要要的麻烦。同时,第三方框架的利用较为方便,这大大的减少了工作量、提高了开发效率。本文要紧介绍四种经常使用的图片加载框架,别离是Fresco、ImageLoader、 Picasso、 Glide,包括他们各自的优缺点、利用步骤等等。

第一看 Fresco, Fresco 是 Facebook 推出的开源图片缓存工具,要紧特点包括:两个内存缓存加上 Native 缓存组成了三级缓存,支持流式,能够类似网页上模糊渐进式显示图片,对多帧动画图片支持更好,如 Gif、WebP。它的优势是其他几个框架没有的, 或说是其他几个框架的短板。

优势:

1. 图片存储在安卓系统的匿名共享内存, 而不是虚拟机的堆内存中, 图片的中间缓冲数据也寄存在本地堆内存, 因此, 应用程序有更多的内存利用, 可不能因为图片加载而致使oom,

同时也减少垃圾回收器频繁挪用回收 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.支持本地缓存文件名规那么概念

利用步骤:

1. 在Application子类中的onCreate方式中初始化ImageLoaderConfiguration

ImageLoaderConfiguration config = new (context)hreadPriority -

2)enyCacheImageMultipleSizesInMemory()iskCacheFileNameGenerator(new

Md5FileNameGenerator())iskCacheSize(50 * 1024 * 1024) emoryCache(new

LruMemoryCache(4 * 1024 * 1024)).tasksProcessingOrderriteDebugLogs() uild();

().init(config);

2. 在具体的地址直接

isplayImage, ;

DisplayImageOptions option = new ()

.resetViewBeforeLoading(true) .cacheOnDisk(true)

.imageScaleType

.bitmapConfig .considerExifParams(true)

.displayer(new FadeInBitmapDisplayer(300))

.build();

().displayImage, , option);

3. 加载各类格式图片

String imageUri = ""; 提供了丰硕的缓存策略

内存缓存,此刻咱们来看Universal-Image-Loader有哪些内存缓存策略

1. 只利用的是强引用缓存

LruMemoryCache(那个类确实是那个开源框架默许的内存缓存类,缓存的是bitmap的强引用,下面我会从源码上面分析那个类)

2.利用强引用和弱引用相结合的缓存有

UsingFreqLimitedMemoryCache(若是缓存的图片总量超过限定值,先删除利用频率最小的bitmap)

LRULimitedMemoryCache(那个也是利用的lru算法,和LruMemoryCache不同的是,他缓存的是bitmap的弱引用)

FIFOLimitedMemoryCache(先进先出的缓存策略,当超过设定值,先删除最先加入缓存的bitmap)

LargestLimitedMemoryCache(当超过缓存限定值,先删除最大的bitmap对象)

LimitedAgeMemoryCache(当 bitmap加入缓存中的时刻超过咱们设定的值,将其删除)

3.只利用弱引用缓存

WeakMemoryCache(那个类缓存bitmap的总大小没有限制,唯一不足的地址确实是不稳固,缓存的图片容易被回收硬盘缓存) FileCountLimitedDiscCache(能够设定缓存图片的个数,当超过设定值,删除掉最先加入到硬盘的文件)

LimitedAgeDiscCache(设定文件存活的最长时刻,当超过那个值,就删除该文件)

TotalSizeLimitedDiscCache(设定缓存bitmap的最大值,当超过那个值,删除最先加入到硬盘的文件)

UnlimitedDiscCache(那个缓存类没有任何的限制)

Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,因此广为人知。square公司,很多知名的开源也是该公司`android-times-square,leakcanary,okhttp,retrofit`。 Picasso的利用方便, 一行代码完成加载图片并显示,

框架体积小。可是不支持 GIF, 而且它可能是想让效劳器去向理图片的缩放, 它缓存的图片是未缩放的, 而且默许利用 ARGB_8888 格式缓存图片, 缓存体积大。整个库分为

Dispatcher,RequestHandler 及 Downloader,PicassoDrawable 等模块。Dispatcher 负责分发和处置 Action,包括提交、暂停、继续、取消、网络状态转变、重试等等。简单的讲确实是 Picasso 收到加载及显示图片的任务,创建 Request 并将它交给 Dispatcher,Dispatcher 分发任务到具体 RequestHandler,任务通过

MemoryCache 及 Handler(数据获取接口) 获取图片,图片获取成功后通过

PicassoDrawable 显示到 Target 中。需要注意的是上面 Data 的 File system 部份,Picasso 没有自概念本地缓存的接口,默许利用 http 的本地缓存,API 9 以上利用

okhttp,以下利用 Urlconnection,因此若是需要自概念本地缓存就需要重概念

Downloader。

Picasso 优势

1.自带统计监控功能。支持图片缓存利用的监控,包括缓存命中率、已利用内存大小、节省的流量等。

2.支持优先级处置。每次任务调度前会选择优先级高的任务,比如 App 页面中 Banner

的优先级高于 Icon 时就很适用。 3.支持延迟到图片尺寸计算完成加载

4.支持飞行模式、并发线程数依照网络类型而变。 电话切换到飞行模式或网络类型变换时会自动调整线程池最大并发数,比如 wifi 最大并发为 4,4g 为 3,3g 为 2。 那个地址

Picasso 依照网络类型来决定最大并发数,而不是 CPU 核数。

5.“无”本地缓存。无”本地缓存,不是说没有本地缓存,而是 Picasso 自己没有实现,交给了 Square 的另外一个网络库 okhttp 去实现,如此的益处是能够通过请求

Response Header 中的 Cache-Control 及 Expired 操纵图片的过时时刻。

利用步骤:

1. 导入Picasso的jar包,添加依托

2. 加载图片

oad ade(300) nto; 仅仅能够进行图片缓存还能够缓存媒体文件。Glide

不仅是一个图片缓存,它支持 Gif、WebP、缩略图。乃至是 Video,因此更该当做一个媒体缓存。

2.支持优先级处置。

3.与 Activity/Fragment 生命周期一致,支持 trimMemory。Glide 对每一个 context

都维持一个 RequestManager,通过 FragmentTransaction 维持与 Activity/Fragment

生命周期一致,而且有对应的 trimMemory 接话柄现可供挪用。

4.支持 okhttp、Volley。Glide 默许通过 UrlConnection 获取数据,能够配合 okhttp

或是 Volley 利用。实际 ImageLoader、Picasso 也都支持 okhttp、Volley。

5.内存友好。Glide 的内存缓存有个 active 的设计,从内存缓存中取数据时,不像一样的实现用 get,而是用 remove,再将那个缓存数据放到一个 value 为软引用的

activeResources map 中,并计数引用数,在图片加载完成后进行判定,若是引用计数为空那么回收掉。内存缓存更小图片,Glide 以 url、view_width、view_height、屏幕的分辨率等做为联合 key,将处置后的图片缓存在内存缓存中,而不是原始图片以节省大小与

Activity/Fragment 生命周期一致,支持 trimMemory。

图片默许利用默许 RGB_565 而不是 ARGB_888,尽管清楚度差些,但图片更小,也可配置到 ARGB_888。

能够通过 signature 或不利用本地缓存支持 url 过时

利用步骤

1. 导入Glide的jar包,添加依托

2. 加载图片

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687954722a60554.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信