【发布时间】:2016-11-18 03:18:51
【问题描述】:
我刚开始在新的三星 Galaxy S6 上测试我的游戏应用。它不断崩溃,日志中出现内存不足错误。我的应用程序通常使用大约 215M,并且在 Galaxy S4 mini、Galaxy Tab S3 和 Galaxy Tab S4 上运行良好,它们分别有 256+M、512+M 和 512+M 的堆。 Galaxy S6 有一个 536M 的堆。在将位图大小减少到可以让 Galaxy S6 运行该应用程序的位置后,我在设备监视器上获得了以下内容,以便对各种设备进行堆使用。
Galaxy S4 mini、Galaxy Tab S3 和 Galaxy Tab S4:
为什么较新的设备使用的堆是其他设备的 4 倍?
【问题讨论】:
-
您是否分配了相对于设备屏幕尺寸大小的位图?愿意分享一些您认为有问题的代码吗?
-
图片来自哪里?如果它们是可绘制资源,您将它们放在哪个目录(或多个目录)中?
-
你有一个大小为 375 MB 的 1 字节数组,Android 将
Bitmaps 存储在一个字节数组中。看看这个gokhanarik.com/android-background-image-high-memory-usage-issue -
我使用 bmp_stars[0] = BitmapFactory.decodeResource(getResources(), R.drawable.starst0,options);
-
我使用 bmp_example = BitmapFactory.decodeResource(getResources(), R.drawable.example,options);用于解码位图。我根据设备堆大小更改选项值。查看您的回复(特别感谢有关屏幕分辨率记忆效应 Gokhan 的文章),我预计该错误是由于 S6 的屏幕密度增加:2-3 取决于屏幕宽度 1920 的运行(不要问我为什么) screenHeight 1080。相比之下,galaxy S4 min 的密度为 1.5,screenWidth 为 960 screenHeight 540。下一个项目是如何修复屏幕密度的代码。
标签: android android-5.0-lollipop android-bitmap