DisplayListCanvas.throwIfCannotDraw
java.lang.RuntimeException - Canvas: trying to draw too large(118098000bytes) bitmap.

是因为加载图太大了,

为什么加载的时候需要创建一个132M的bitmap呢?

查了一下,很快找到原因,是因为原本应该放在drawable-xxhdpi的2倍图放在了drawable目录下面,Android系统在加载资源的时候,会把图片放大。将图片移动至drawable-xxhdpi,问题得到解决。

把frameworks\base\graphics\java\android\graphics\RecordingCanvas.java中的throwIfCannotDraw函数里面判断bitmap参数超过最大值就抛出异常。把getPanelFrameSize函数的默认值100M改大,150M。
/Users/lzlc/Library/Android/sdk/sources/android-34/android/graphics/RecordingCanvas.java

还有一个报错,也是图片太大了。
Fatal Exception: java.lang.OutOfMemoryError
Failed to allocate a 6630276 byte allocation with 2131152 free bytes and 2MB until OOM

对于老的手机应用,drawable-mdpi不超过 1080p(1920×1080 像素)的图片。

res/
    drawable-mdpi/
        background.png (分辨率较低,适合中密度屏幕)
    drawable-hdpi/
        background.png (分辨率适中,适合高密度屏幕)
    drawable-xhdpi/
        background.png (分辨率较高,适合超高密度屏幕)
    drawable-xxhdpi/
        background.png (分辨率很高,适合超超高密度屏幕)

标签: none

添加新评论