【问题标题】:Same application uses different amounts of memory on different Android devices相同的应用程序在不同的 Android 设备上使用不同数量的内存
【发布时间】:2011-03-20 10:07:51
【问题描述】:

我正在开发一个游戏,它使用来自 2000x2000 像素图像的位图的活动。

在我的 HTC Hero 中,当我运行 Activity 时,我使用了 12MB。

但是,如果我尝试在任何具有 16MB 堆的模拟器中运行应用程序,VM 会因为 OutOfMemoryError 尝试分配 16.4 MB 而崩溃;怎么可能?

我也尝试过使用其他模拟器并使用了 20MB。

要测量我正在使用的内存量:

int usedMegs = (int) (Debug.getNativeHeapAllocatedSize() / 1048576L);
    String usedMegsString = String
    .format(" - Memory Used: %d MB", usedMegs);
    getWindow().setTitle(usedMegsString);

为什么同一位图在 HTC Hero 中需要 12MB 而在其他设备中需要 20MB?

编辑:我发现这是密度的原因。 密度 1 = 12MB ,密度 0.75 = 8MB 和密度 1.5 = 20MB(不完全是,一些 MB 来自其他活动)

我可以对 1.5 密度的设备说使用 1 来解码位图吗???

编辑 2:我在 /drawable 中有图像,所以当我用 1.5 加载它时,它变得更大了。 如果我将图像放在 /drawable-hdpi 中,图像需要更少的内存 (12 MB),因为它没有缩放。

【问题讨论】:

    标签: android memory bitmap heap-memory


    【解决方案1】:

    您如何将位图加载到内存中?这只是我的猜测,但也许 HTC 设备正在使用 24 位色彩空间加载位图,而其他设备正在使用 32 位色彩空间。每像素 24 位的 2000x2000 位图将使用大约 12 MB 的内存,而每像素 32 位的相同位图需要接近 16 MB 或内存。

    【讨论】:

    • 我的英雄是密度为 1 的 HVGA,这就是原因。我正在尝试使用 WVGA 模拟器。我不知道我是否可以在所有设备中将密度设置为 1 以便始终获得 12MB。
    猜你喜欢
    • 2011-12-27
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多