Android N Display Size设置为“Small”时,“Canvas:试图绘制太大的位图”

当新引入的Display size操作系统设置设置为过大的值时,我有一个发布的应用程序在Android N上启动时崩溃。

当我看着logcat,我看到以下消息:

 java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap. 

我已经将问题追溯到我的第一个活动中的ImageView,显示一个很好的大背景图像。 有问题的图像是2048×1066,是在我的通用drawables目录,所以无论密度,这个图像将被使用。

Display size设置为Display size一切正常。 但是,当我到Default ,它停止工作。 如果我用较小的图像交换图像,它在Default ,但如果我去了Large ,它再次停止工作。

我的猜测是,调整Display size会导致设备的行为像一个像素密度较高的物理上较小的设备。 但我不明白我应该在这里做什么。 如果我逐渐放大较小的图像以获得更高的分辨率,则在实际大屏幕上显示效果不佳。 还是我不明白什么?

任何指针将不胜感激。

Solutions Collecting From Web of "Android N Display Size设置为“Small”时,“Canvas:试图绘制太大的位图”"

我的情况,移动(高分辨率)飞溅位图从drawabledrawable-xxhdpi是解决scheme。

我有同样的问题。 我没有怀疑我的启animation面是问题,因为它显示在应用程序启动时,但事实certificate闪屏是问题。

在我的情况下的初始屏幕有xxhdpi分辨率,它被错误地放在drawable文件夹,而不是drawable-xxhdpi 。 这使得Android假设启动屏幕具有mdpi分辨率,并将图像缩放为所需大小的3 * 3倍,并尝试创build位图。

尝试使用Bitmap.Factory类,这个链接将帮助你有效地加载大的位图

我不知道它会对一些人有帮助,但是我会把它留在这里。 在我的情况下 – 问题只是在使用Android 7的Sumsung设备上,问题在于屏幕比例。 更换高度为1024像素后 – 一切都很好

将您的图像移动到mipmap-xxhdpi.Your图像是位图格式,所以你应该把你的图像在mipmap文件夹,然后它将工作