安卓加载图太大问题Canvas: trying to draw too large(118098000bytes) bitmap
DisplayListCanvas.throwIfCannotDraw
java.lang.RuntimeException - Canvas: trying to draw too large(118098000bytes) bitmap.
把 1080p 图放在 drawable/(mdpi),系统以为你是给低清屏的,到高清屏就要放大 4 倍,内存爆炸。
解决:移到 drawable-nodpi/ ,就是告诉系统:别动我的像素。
| 项目 | 数值 |
|---|---|
| 图片实际像素 | 1080 × 2400 = 2,592,000 像素 |
| 色深 (ARGB\_8888) | 4 字节/像素 |
| 原始内存 | 2,592,000 × 4 = 9.9 MB |
| 资源目录密度 | drawable/ = mdpi (160dpi) |
| Galaxy S6 屏幕密度 | 640dpi (xxxhdpi) |
| 缩放倍数 | 640 / 160 = 4× |
| 最终内存 | 9.9 MB × 4² = 158 MB |
为什么是平方?
因为 宽高都要缩放:
4× 缩放 = 16 倍像素 = 16 倍内存
原图: 1080 × 2400
缩放后: 4320 × 9600 (×4)
像素数: 41,472,000 (×16)