Bitmap的深入理解

本文详细探讨了Android中Bitmap的内存管理,包括Bitmap在内存中的分配、Bitmap.Config对画质的影响、density与densityDpi的区别,以及Bitmap的创建、解码流程。还介绍了如何通过inSampleSize、inDensity、inTargetDensity等参数优化Bitmap占用内存,以及Bitmap.compress方法的使用。同时,文章提到了inBitmap和inPurgeable属性在内存回收中的作用,分析了它们在不同Android版本中的行为变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android内存分配

Java Head(Dalvik Head),这部分的内存是由Dalvik虚拟机管理,可以通过java的new方法来分配内存;而内存的回收是符合GC Root回收规则。内存的大小受到系统限制,如果使用内存超过App最大可用内存时会抛出OOM错误。

Native Head,这部分内存,不受Dalvik虚拟机管理的,内存的分配和回收是通过C++的方式来创建和释放的,没有自动回收机制。而内存的大小受硬件的限制(手机内存的限制)。

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

Bitmap内存

Bitmap对象的内存分为两部分:

  • Bitmap对象

  • Bitmap像素数据(即一张图片的数据)。

在Android 2.3.3(API 10)之前,Bitmap的像素数据的内存时分配在Native堆上的,而Bitmap对象的内存则分配在Dalvik堆上的;

由于Native堆上的内存时不受DVM管理的,如果想要回收Bitmap的所占用内存的话,那么需要调用Bitmap.recyle()方法。

而API 10之后呢,谷歌将像素数据

博客
v8worker
05-08 2958
05-06 2941
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值