https://github.com/bumptech/glide/wiki/Configuration
GlideModule是一个接口,须要实现其对应的办法。

这里我们只须要应用 applyOptions() 这个办法,它用于在 Glide 的默认设备的基本上,追加一些我们须要的设备。
而在这里,我们可以根据当前设备的内存情况,对其进行一个设定,应用 ActivityManager 获取当前设备的内存情况,如不雅是处于 lowMemory 的时刻,将图片的 DecodeFormat 设置为 RGB_565 , RGB_565 和默认的 ARGB_8888 比,每个像素会少 2 个byte,如许,等于一张同样的图片,加载到内存中会少一半内存的┞芳用( ARGB_8888 每个像素占 4 byte)。

2.3 避免应用圆角的ImageView
而在 Android 下,也有大年夜量的类似 XxxImageView 的开源控件,用于操作 Bitmap 以达到一个圆角图片的效不雅,例如 Github 上比较火的 RoundedImageView 。
它们大年夜部分的道理,是接收到你传递的 Bitmap ,然后再输出一个与本来 Bitmap 等大年夜的新 Bitmap ,在此基本之上,进行圆角的一些处理,这就导致了,实际上会在内存中,多持有一个 Bitmap ,一下一张图片占用的内存就被加倍了。
所以既然已经选择应用 Glide ,推荐应用 glide-transformations 这个开源库合营应用,glide-transformations 应用 Glide 的 bitmapTransfrom() 接口,实现对加载的 Bitmap 的进行一些变换操作。
在 App 被置换到后台的时刻,调用 Glide.cleanMemroy() 清理掉落所有的内存缓存。
glide-transformations 的 Github 地址如下:
https://github.com/wasabeef/glide-transformations
具体 glide-transformations 的应用,可以查看 Github 汕9依υ?档,下面是它的一个效不雅图。

2.4 根据内存情况,裁剪你的图片
前面的介绍的一些优化点,都是一些推荐的通用做法,根本上用了前面介绍的办法,图片导致的 OOM 应当会大年夜幅度削减。
接下来介绍一个在 Android TV 上,加载全屏大年夜图的时刻,优化内存问题的一个解决办法。
起重要明白一点,国内 Android TV 的硬件情况异常的不好,二百三百的智能盒子到处都在卖,究靖荷饲跑的 Android 体系,你想想你应用的是一款 299 的 Android 手机,你对它也不会有什么等待了。然则 Android TV 又是为了电视做的,所以大年夜部分情况下,它都是须要支撑 1920 * 1280 之类的屏幕尺寸,导致它如不雅加载一张全屏的大年夜图,消费的内存是不忍直视的,如不雅在内存情况不好的情况下,可能就直接 OOM 崩溃了。
所以,对于这种极端的情况,我想到了一个办法,根据当前的内存情况,按比例缩小须要显示的全屏图片,如许加载到内存中的图片,就是按比例缩小的。
Glide 帮我们做了大年夜部分内存治理方面的工作,实际上它还支撑做的更好。
在这里就须要用到 DrawableRequestBuilder 的 override() 这个 Api 了,它可以接收一个 width 和 height ,来从新指定加载图片的尺寸。
既然 Glide 已经供给了标准的 Api ,那么我们还须要获取到当前运行设备的宽高。

这里推荐应用 getRealSize() 的方法获取屏幕的宽高,它可以真实的拿到当前屏幕的尺寸。其它 Api 在朝分智能电视和盒子上,拿到的尺寸会小,因为没有计算 StatusBar 或者 NavigationBar的高度,这些都是经验之谈。

在个中,记录 trim 的 level 这个值,反竽暌功当前的内存级别,在应用的时刻,经由过程 getBitmapSize() 裁剪出一个相符当前内存情况的尺寸。
例子中只是对 TRIM_MENORY_RUNNING_LOW 进行了处理,会根据屏幕尺寸,缩放到 0.8f 倍的状况。如不雅要做的更多,可以将其它几个 level 也加上,调剂不合的缩放倍数。

两个都输出一下,看看差别,同一张全屏的图片,不缩放和缩放 0.8f 的差别。
I/cxmyDev: bgImage byteCount : 8294400I/cxmyDev: bgImage byteCount : 5308416
可以看到,优化的目标照样达到了。可以节约大年夜概 3MB 阁下的内存空间,而图片又不至于模糊到无法看的地步。
三、小结
优化是没有终点的,今天先聊到这里,之后有想到的再弥补。如不雅你有什么更好的建议,可以在文末留言一路评论辩论一下。
iOS 长按打赏

【编辑推荐】
- 探秘基于“内存云”的微软图形数据库Trinity
- 3百大年夜战激发行业热议 搜刮范畴竞争态势或将经久存在
- 全何办事器内存经由过程内存测试威望CMTL认证
- Linux内存治理优化:面向低延迟/高吞吐量数据库GraphDB
- JavaScript新规范将惹人异步函数与内存共享机制
推荐阅读
今朝还不清跋扈上述被收购的法国公司的技巧,是否应用到了 iPhone X 手机的面部辨认或是动态神情符功能中。腾讯科技讯,在苹不雅 11 月份将上市发售的新款手机 iPhone X 中,计算机视觉辨>>>详细阅读
本文标题:Glide 这样用,更省内存
地址:http://www.17bianji.com/lsqh/37698.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示