多样化媒体加载
Glide 不仅是一个图片缓存,它支持 Gif、WebP、缩略图。甚至是 Video
生命周期集成
通过设置绑定生命周期,我们可以更加高效的使用Glide提供的方式进行绑定,这样可以更好的让加载图片的请求的生命周期动态管理起来
高效的缓存策略
A. 支持Memory和Disk图片缓存
B. Picasso 只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide 会根据你 ImageView 的大小来缓存相应大小的图片尺寸
比如你 ImageView 大小是200200,原图是 400400 ,而使用 Glide 就会缓存 200200 规格的图,而 Picasso 只会缓存 400400 规格的。这个改进就会导致 Glide 比 Picasso 加载的速度要快,毕竟少了每次裁剪重新渲染的过程,非常灵活 &加载速度快
C. 内存开销小
默认的 Bitmap 格式是 RGB_565 格式,而 Picasso 默认的是 ARGB_8888 格式,这个内存开销要小一半。
Android关于图片内存计算,共有四种,分别是:
ALPHA_8:每个像素占用1byte内存
ARGB_4444:每个像素占用2byte内存
ARGB_8888:每个像素占用4byte内存(默认,色彩最细腻=显示质量最高=占用的内存也最大)
RGB_565:每个像素占用2byte内存(8bit = 1byte)
举例说明:一个32位的PNG=ARGB_8888=1204x1024,那么占用空间是:1024x1024x(32/8) = 4,194,304kb=4M左右
在解析图片的时候,为了避免oom和节省内存,最好使用ARGB_4444模式(节省一半的内存空间)
4.2 缺点
使用方法复杂
由于Glide其功能强大,所以使用的方法非常多,其源码也相对的复杂
包较大
Glide是Google官方推荐的一款图片加载库,使用起来非常的简单便利,通常我们最简单的调用如下
但是在使用Glide时候,我们可以通过一些设置来优化内存占用,避免界面出现卡顿或者OOM, 例如:一个购物网站的商品详情页有好几十张超大图(运营配置的大图一般都是高清相机直接上传的,后台也没有做图片限制),这个时候当我们上下滑动商品详情页会很明显出现卡顿,或者是我们无限制的通过猜你喜欢打开很多个商品详情页,这个时候我们通过Android Studio自带Profiler内存检测工具可以很明显的看到我们的内存很快达到极限.
我们使用最基础的方式加载一张大小为 4665600 byte 的图片
通过logger日志看看最终我们拿到的图片大小
默认情况下,色彩度为 ARGB_8888 图片,每像素会占用 4 bytes 的大小。Glide V3使用 RGB_565 位图格式,它需要每个像素 2 bytes ,内存占用是 ARGB_8888 的一半, 最新的Glide V4默认使用的是 ARGB_8888 格式
我们通过下图看看 ARGB_8888 和 RGB_565 位图的区别
GlideModule是Glide提供的一个配置接口,它会在第一次使用Glide的时候被调用,用于进行Glide的一些初始配置
具体 GlideModule 的使用,可以参见官方文档:
github.com/bumptech/gl…
修改GlideV4默认配置
修改Glide V3默认配置
使用RGB_565替代ARGB_8888的缺点
GlideV4使用RGB_565加载大图
通过logger日志看看最终我们拿到的图片大小
可以看到我们拿到的图片size比原图大小 4665600 byte 少了一半
当然,加载的位图的大小不仅取决于其质量,还取决于大小。 在ImageView中显示图像之前,Glide调整其大小,使其适合目标尺寸,以实现最佳的内存占用。 但是,有关Glide如何工作的一些事情值得了解,没必要将大位图加载到内存中。
我们通过logger日志看看最终我们拿到的图片大小
我们通过logger日志看看最终我们拿到的图片大小
我们可以看到, 我们的原图大小为 4665600 ,我们使用上述两种方式解决之后图片大小变为了 1492992
调整完的效果还是非常棒的,美女还是那样的漂亮,只有后边背景颜色有些许的减淡,但是我们大幅度降低图片内存占用,为了我们手机性能的大幅度提高这点质量上的损失还是可以接受的(除非UI设计师太苛刻).
Glide是一个很棒的库,可以轻松加载图像。 但是,有时候最好知道它如何以最有效的内存方式使用。 我希望我在本文中描述的事实将帮助您减少应用程序的内存占用,并避免一些邪恶的OOM错误。
参考文章
https://proandroiddev.com/how-to-optimize-memory-consumption-when-using-glide-9ac984cfe70f
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)