用这4点优化Bitmap内存,再也不用担心OOM了

码个蛋(codeegg)第 604 次推文

作者:_陈祥

博客:https://www.jianshu.com/p/cd478796a19f

前言

  • 在 Android开发中,性能优化策略十分重要

  • 本文主要讲解性能优化中的Bitmap使用优化,希望你们会喜欢


目录

1. 优化原因

即为什么要优化图片Bitmap资源,具体如下图:

2. 优化方向

本文将从以下方面优化图片Bitmap资源的使用 & 内存管理

3. 具体优化方案

下面,我将详细讲解每个优化方向的具体优化方案

3.1 

使用完毕,释放资源
  • 优化原因
    使用完毕后若不释放图片资源,容易造成内存泄露,从而导致内存溢出

  • 优化方案
    a. 在Android2.3.3(API 10)前,调用 Bitmap.recycle()方法
    b. 在Android2.3.3(API 10)后,采用软引用(SoftReference)

  • 具体描述
    在Android2.3.3(API 10)前、后,Bitmap对象 & 其像素数据的存储位置不同,从而导致释放图片资源的方式不同,具体如下图

注:若调用了Bitmap.recycle()后,再绘制Bitmap,则会出现Canvas: trying to use a recycled bitmap错误


3.2 适配分辨率 & 缩放图片

  • 优化原因
    若Bitmap与当前设备的分辨率不匹配,则会拉伸Bitmap,而Bitmap分辨率增加后,所占用的内存也会相应增加

因为Bitmap 的内存占用 根据 x、y的大小来增加的

  • 优化方案

3.3 按需选择合适的解码方式

  • 优化原因
    不同的图片解码方式对应的内存占用大小相差很大,具体如下

  • 优化方案
    根据需求选择合适的解码方式

使用参数:BitmapFactory.inPreferredConfig 设置
默认使用解码方式:ARGB_8888


3.4 设置图片缓存

  • 优化原因
    重复加载图片资源耗费太多资源(CPU、内存 & 流量)

  • 优化方案

关于三级缓存机制,此处不作过多描述,具体请看文章:三级缓存说明

至此,关于图片资源Bitmap的使用优化讲解完毕。


4 总结

  • 本文全面总结了图片资源Bitmap的使用优化,具体如下图

近期文章:

今日问题:

Bitmap使用优化有啥心得吗?

在码个蛋(codeegg)后台回复「社群」即可加入学习群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值