和Picasso有90%类似度,但却比Picasso省内存,有助于APP的优化!html
Android Glide Google 推荐加载图片框架(加载图片详解篇)android
dependencies { compile 'com.github.bumptech.glide:glide:3.5.2' compile 'com.android.support:support-v4:22.0.0' } // Glide须要依赖Support Library v4,别忘了。其实Support Library v4已是应用程序的标配了。
Glide.with(context) .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg").into(ivImg);
Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。git
同时将Activity/Fragment做为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,好比Paused状态在暂停加载,在Resumed的时候又自动从新加载。因此我建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。github
Glide默认的Bitmap格式是RGB_565 ,比ARGB_8888格式的内存开销要小一半。若是你对默认的RGB_565效果以为难以接受,能够建立一个新的GlideModule将Bitmap格式转换到ARGB_8888:缓存
public class GlideConfiguration implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888); } @Override public void registerComponents(Context context, Glide glide) { // register ModelLoaders here. } }
同时在AndroidManifest.xml中将GlideModule定义为meta-dataapp
<meta-data android:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration" android:value="GlideModule"/>
整个库分为 RequestManager(请求管理器),Engine(数据获取引擎),Fetcher(数据获取器),MemoryCache(内存缓存)、DiskLRUCache,Transformation(图片处理),Encoder(本地缓存存储),Registry(图片类型及解析器配置),Target(目标) 等模块。框架
Glide 收到加载及显示资源的任务,建立 Request 并将它交给RequestManager,Request 启动 Engine 去数据源获取资源(经过 Fetcher ),获取到后 Transformation 处理后交给 Target。ide
·Glide 依赖于 DiskLRUCache、GifDecoder 等开源库去完成本地缓存和 Gif 图片解码工做。post
Glide 优势优化
(1) 图片缓存->媒体缓存
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。
其余:Glide 能够经过 signature 或不使用本地缓存支持 url 过时