一概述
Glide 的横空出世,在图片框架领域打败了一众强劲的对手。有老牌王者 ImageLoader ,也有新贵 Picasso 、Fresco。私以为 Picasso (毕加索) 的名字最有意境,奈何 Glide 武功更胜一筹,人们只记得谁第一个登上了月球,谁第一个踏上了南极点,自然而然 Glide 在 Android 图片框架占有率牢牢的坐上的第一宝座。
虽然只是使用第三方,我们可以做得很没有深度 “with+load+into” 一下;也可以把 Glide 那么多的用法策略烂熟于胸能够实际解决业务上遇到的问题;还可以深入 Glide 源码学习他的设计理念、设计思路、框架封装、设计模式来提升我们代码的基本功。
今天偶然我看到微信有个设置聊天背景功能随意试了一张大图,发现他加载很迅速,体验很好。不确定微信底下是不是使用的 Glide 也不知道微信的缓存策略,就看看如果是我遇到一个大图加载的需求能不能做到极速的加载,如果是本地磁盘图片是怎么样。如果是一个网络图片资源又怎么样,Glide又有什么样的缓存策略让我们来应对不同的场景,我们一起来探究一下吧~!
二 实践
我们选取了一张 3.5MB 的本地资源,我们看下各种场景加载速度并且将他们打印出来
1 加载本地资源 By ImageView
private void loadLocalImageView(String url) {
long startTime = System.currentTimeMillis();
Glide.with(this).load(url).into(img);
Log.e("zxm", "loadLocalImageView time : " + (System.currentTimeMillis() - startTime));
}
2 加载本地资源 drawable
private void loadLocalDrawable(String url) {
final long startTime = System.currentTimeMillis();
Glide.with(this).asDrawable().load(url).into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
root.setBackground(resource);
Log.e("zxm", "loadLocalDrawable time : " + (System.currentTimeMillis() - startTime));
}
});
}
我们可以看到的是同样是本地图片资源,转为 drawable 方式去加载竟然耗时 0.52 秒,即使后面有缓存也达到了 0.12 秒左右。这样的加载速率基本是肉眼可以感知到的。给用户的感觉也有是闪烁了一下
体验自然就会变差一些,另外这种转换的方式还包含转换成 bitmap 等情况。
Glide 网络资源加载

我们从百度图库里面获取了一张 3.7MB 的网络资源图片(上图)
1 网络资源 + ImageView
private void loadHttpImageView(String url) {
long startTime = System.currentTimeMillis();
Glide.with(this).load(url).into(img);
Log.e("zxm", "loadHttpImageView time : " + (System.currentTimeMillis() - startTime));
}
让我意向不到的是加载网络资源竟然和本地资源速度差不多
1 网络资源 + drawable
private void loadHttpDrawable(String url) {
long startTime = System.currentTimeMillis();
Glide.with(this).asDrawable().load(url).into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
root.setBackground(resource);
Log.e("zxm", "loadLocalDrawable time : " + (System.currentTimeMillis() - startTime));
}
});
}
网络加 drawable 第一次竟然达到了惊人的 0.75 秒 ,后面有缓存以后好不少速度快了 8 倍以上。
个人理解是在异步转化 drawable 和 bitmap 的过程中底下有大量的 IO 耗时操作去做数据转化,至于为什么 ImageView 第一次也这么快,这个还有待我们去做源码层面的探究
得出结论及时在本地磁盘上的图片,也需要根据场景考虑控件选型。到底是使用 ImageView 还是 drawable 还是 bitmap 我们需要慎重考虑加载转换速度的影响。
















