RecyclerView 加载大量图片如何避免OOM

1.降低图片的色彩解析模式,比如 glide 默认使用 RGB_565,内存直接减少一半.

2.对于网络图片可以通过 cdn 云平台按需加载,比如腾讯云 cdn 可以在图片 url 后面拼接参数,界面上只加载所需要的大小质量的图片.

3.高效的图片缓存,LRU 缓存,Glide 的多尺寸缓存等.

4.高效的处理 Bitmap.bitmap 的复用和主动回收.

5.如果大图片有预览功能,还可以使用 BitmapRegionDecoder 切片和手势,可以优化超大图片.

6.加载图片使用 http2.0.

7.加载 webp 格式的图片.

8.本地的图片等资源,要放置在合理的分辨率目录下面.

9.对于某一些图片可以预加载.

10.滑动列表的停止加载图片,停止的时候继续加载.

11.安卓 5.0 以下的手机,可以使用 Fresco,他将图片数据放在 native 堆里面,目前 8.0 以后都是放在 native 堆里面,可以有效减少 OOM.

12.图片加载和页面的生命周期绑定,glide 有这个功能.

13.内存不足的时候,清除内存缓存.

14.对于本地大图片,先进行压缩.

15.调整尺寸、裁剪图片、修改设置,有时候图片比显示的大,就缩一下或裁一下,没必要的时候就别 ARGB8888,rgb565 也行.

16.非显示范围视图及时释放对图片资源,尤其是 bitmap 的引用.

17.添加多级图片缓存,减少外存读写和网络请求次数.

18.添加视图外资源预加载的策略.

19.加载图片使用后台线程,回调方式处理,减少主线程占用,避免影响界面滑动流畅.

20.极端的还尽量复复用资源和对象,少 new 、减少 gc 次数,gc 时也会有微弱卡顿.

21.合理添加图片加载效果提高视觉自然度和流畅度.

发表回复

后才能评论