先把结论放在前面:Bitmap 是 Android 应用内存占用里最容易失控的一块,而它的失控通常来自一个误解——以为内存等于图片文件大小。 实际占用是 宽 × 高 × 每像素字节数,一张 4000×3000 的 ARGB_8888 图片,解码后约 46 MB,而它的压缩文件可能只有 2 MB。 Bitmap 优化的核心动作只有一个:按显示尺寸解码,不要按原始尺寸解码。
面试里这题属于\”内存专题里最实用的一块\”。答得浅的是\”用 inSampleSize 采样、调用 recycle()\”;答得深的是能讲清 inPreferredConfig 对每像素字节数的影响、RGB_565 丢失 alpha 与色彩精度、recycle() 的误用风险与框架已回收的场景、以及硬件位图(HardwareConfig)把像素移到图形内存后的能力边界。
先算清内存账
Bitmap 像素数据在 Native 堆,不在 Java 堆。 这一点决定了排查方法:看 dumpsys meminfo 的 Native Heap,而不是堆快照。



