Почему ASUS Transformer Prime - единственное устройство с исключением OutOfMemory - PullRequest
2 голосов
/ 17 февраля 2012

Я работаю над приложением Android, которое должно отображать 4 больших растровых изображения (6 x размер экрана). Вначале у меня были проблемы с этим, но с оптимизацией кода для управления памятью, которая работает на целых устройствах. Но на ASUS Transformer Prime в версии 4.0.3 для Android у меня есть ошибка OutOfMemory. Это очень странно, потому что размер кучи составляет 256 Мб. Много по сравнению с другими устройствами, на которых он работает правильно.

Мы активировали Large Heap и отключили аппаратное ускорение.

У вас есть представление о нашей проблеме?

1 Ответ

2 голосов
/ 17 февраля 2012

Ваш экран имеет разрешение 1280x800, поэтому для растрового изображения с размером экрана 32 бит / с потребуется чуть менее 4 МБ, а для растрового изображения с размером экрана 6 x потребуется 23,5 МБ. И вы хотите четыре из них ... это 93,75 МБ.

Предел кучи процесса варьируется от устройства к устройству, но я бы посчитал, что 64 МБ - это много (возможно, я отстал). 256 МБ огромно!

ИМХО, вы вообще не должны пытаться хранить такие массивные растровые изображения в памяти. Вам лучше разбить их на плитки размером не больше экрана и загружать плитки по мере необходимости.

В качестве альтернативы, попробуйте использовать 16-битные изображения или выделить место для массивных растровых изображений в JNI (т.е. в C) и полностью обойти управление кучей Java.

...