Одно и то же приложение использует разные объемы памяти на разных устройствах Android - PullRequest
2 голосов
/ 20 марта 2011

Я занимаюсь разработкой игры, в которой используется действие с растровым изображением из изображения размером 2000x2000 пикселей.

В моем HTC Hero при запуске упражнения я использую 12 МБ.

Однакоесли я пытаюсь запустить приложение в любом эмуляторе с кучей 16 МБ, происходит сбой виртуальной машины из-за ошибки OutOfMemoryError, пытающейся выделить 16,4 МБ;как это возможно?

Я тоже пытался с другим эмулятором и использовал 20 МБ.

Для измерения объема памяти я использую это:

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

Почемунужно ли одному и тому же растровому изображению 12MB в HTC Hero и 20MB в других устройствах?

Редактировать: Я понял, что это причина плотности.Плотность 1 = 12 МБ, Плотность 0,75 = 8 МБ и Плотность 1,5 = 20 МБ (не совсем, некоторые МБ из других видов деятельности)

Можно ли сказать устройству 1,5 плотности, чтобы использовать 1 для декодирования растрового изображения ???

Редактировать 2: у меня было изображение в / drawable, поэтому, когда я загрузил его с 1,5, было сделано больше.Если я помещу изображение в / drawable-hdpi, ему потребуется меньше памяти (12 МБ), поскольку оно не масштабируется.

1 Ответ

2 голосов
/ 20 марта 2011

Как вы загружаете свое растровое изображение в память? С моей стороны это всего лишь предположение, но, возможно, устройство HTC загружает растровое изображение, используя 24-битное цветовое пространство, в то время как другие устройства используют 32-битное цветовое пространство. Растровое изображение 2000x2000 при 24 битах на пиксель будет использовать примерно 12 МБ памяти, в то время как для того же растрового изображения с 32 битами на пиксель потребуется около 16 МБ или памяти.

...