美文网首页Android精选
图片框架对比和glide源码分析

图片框架对比和glide源码分析

作者: 杨华_6f65 | 来源:发表于2019-04-28 17:00 被阅读2次

现在主流的图片加载框架有Picasso、Glide、Fresco
Glide比Picasso快,而且功能也比Picasso强大,支持各种格式。(gif,video本地),picasso体积比较小。
体积上Picasso<Glide<Fresco,Picasso比较轻量级。
相比于Glide,Fresco可以说是更专业的一款图片加载框架,它在内存管理方面有着不可比拟的优势,加载速度也很不错,特别是对Android 5.0之前的内存优化方面,大大减少了OOM的情况发生。但是另一个方面,它的包有2M之大,而且对于一般的App而言,使用Fresco有点大材小用的意思,Glide已经满足我们绝大部分需求了,除非你是Instagram之类的图片社交应用,否则的话Glide就已经足够使用了

Ashmem(Android匿名共享内存),这部分内存类似于Native内存区,但是它是受Android系统底层管理的,当Android系统内存不足时,会回收Ashmem区域中状态是 unpin 的对象内存块,如果不希望对象被回收,可以通过 pin 来保护一个对象。

Glide 源码分析

1、Glide实现了内存缓存和磁盘缓存,且都设置了相应的大小,并根据lrus算法进行更新和删除。
2、Glide将加载了的图片添加到Map(Key, ResourceWeakReference)中实现内存缓存。
3、Glide的加载顺序是先从内存中获取,若没有则从磁盘中获取,在没有则通过网络获取。从网络上获取到了图片之后若设置了可缓存,则会缓存到磁盘中;然后在通过相应的加载参数进行解码压缩裁剪等操作之后得到图片设置给ImageView,同时缓存到内存中。
4、Glide通过为当前Activity添加一个fragment来监听相应的生命周期方法,从而实现加载与Activity生命周期绑定,onstart时进行加载、onstop时停止加载等。

在系统内存环境不足的情况下,会回调一些 onTrimMemory() 或者 onLowMemory() 等方法,这些都是在提醒开发者,当前设备的内存环境已经发生了变化,你最好调整你的内存使用策略,
你主要用到 Glide 的 trimMemory() 和 cleanMemroy() 方法,它们一个用来裁剪 Glide 缓存的图片内存空间,一个用来清理 Glide 缓存的内存空间

其实 LruResourceCache 和 LruBitmapPool 中 BitmapFactory里面的 inBitmap复用内存。

按比例缩小需要显示的全屏图片,这样加载到内存中的图片,就是按比例缩小的。
在这里就需要用到 DrawableRequestBuilder 的 override() 这个 Api 了,它可以接受一个 width 和 height ,来重新指定加载图片的尺寸。
BitmapFactory sample方法来缩小内存使用。

相关文章

网友评论

    本文标题:图片框架对比和glide源码分析

    本文链接:https://www.haomeiwen.com/subject/ishjnqtx.html