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 =
最终内存9.9 MB × 4² = 158 MB

为什么是平方?
因为 宽高都要缩放:
4× 缩放 = 16 倍像素 = 16 倍内存
原图: 1080 × 2400
缩放后: 4320 × 9600 (×4)
像素数: 41,472,000 (×16)

标签: none

添加新评论