as崩溃报错Canvas: trying to draw too large(118098000bytes) bitmap
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 (分辨率很高,适合超超高密度屏幕)