为什么 Samsung Galaxy S6 (Lollipop) 为位图分配旧设备内存的 4 倍

Why is Samsung Galaxy S6 (Lollipop) allocating 4 times the memory of older devices for bitmaps

我刚开始在新的 Samsung 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:

银河 S6(棒棒糖):

为什么新设备使用的堆是其他设备的 4 倍?

事实证明,问题出在设备端,在此处支持不同屏幕尺寸的文档中未提及:http://developer.android.com/training/multiscreen/screensizes.html. According to an insightful article by Gokhan Arik, 'Android background image high memory usage issue' at http://gokhanarik.com/android-background-image-high-memory-usage-issue/, referencing a CommonsWare answer to a question similar to mine here: ,高密度设备将调整存储在通用 [=18] 中的图像的大小=] 文件夹的大小要大得多,以匹配更高的屏幕分辨率,在我的例子中是 4 倍。

简单的解决方案是将我所有的位图(大小有数百 KB)放入名为“drawable-nodpi”的文件夹中,然后删除旧的 'drawable' 文件夹。我希望在我最终买得起密度 3 设备进行测试之前知道这个问题。

我最近发现的一个缺点是,当您没有针对不同屏幕密度的多个可绘制文件夹时,Google Play 将不再考虑您的设备 'designed for tablets'。太不可思议了,您可能必须创建空的才能不丢失此名称。