Разделение памяти Android

Я получаю ошибку "размер растрового изображения превышает VM". Я прочитал, что существует ограничение на 16 МБ памяти. В этом потоке Ромен Гай говорит, что" вы можете выделить только 16 МБ памяти для всего вашего приложения ".

Однако у моего приложения должно быть нехватка памяти задолго до того, как он достигнет этого предела. Поэтому я задаю вопрос: как распределить память для моего приложения... как увеличить выделение для моего приложения (в пределах максимального 16 МБ)?

Ответы

Ответ 1

Как и в случае любой виртуальной машины Java, память кучи будет автоматически расти до максимального размера. Но растровые изображения выделяются вне виртуальной машины, поэтому вы не видите их легко в статистике. Лучшее, что вы можете сделать, это убедиться, что вы не используете большие растровые изображения или уменьшаете масштаб изображения, используя http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

Из Eclipse вы можете сгенерировать кучу кучи, когда находитесь на Android 1.6 или выше, и вы можете проанализировать дамп с Eclipse MAT.

Как правило, вы не можете контролировать максимальный размер кучи на реальном устройстве, если только вы не работаете с настраиваемым оборудованием или прошивкой.

На сайте developer.android.com должна быть статья о сбросе кучи на 1.6, но я не могу ее найти.: (

Edit
Кроме того, я должен упомянуть, что вы можете запросить больше памяти для приложений, используя

Android: largeHeap = "истина"

в манифесте. Но это очень плохо, поскольку большинство приложений не нуждаются в этом.

Ответ 2

Обратите внимание, что ограничение кучи зависит от устройства. На Droid или Nexus One это ограничение составляет 24 МБ (для размещения больших графических ресурсов.)

Ответ 3

Если вы используете потоки, отладчик может быть источником проблемы. Если вы запустите приложение под отладчиком, то все созданные потоки будут сохранены отладчиком, даже когда они будут завершены. Это приводит к ошибкам памяти, которые не будут выполняться, когда приложение работает без отладчика.

http://code.google.com/p/android/issues/detail?id=7979

https://android.googlesource.com/platform/dalvik/+/master/docs/debugger.html

Ответ 4

Недавно я нашел ответ на ваш вопрос.

Перейдите в Android SDK Directory и
запустить sdk manager (Tools- > android запустить этот файл)

В менеджере SDK перейдите в Инструменты → Управление AVD

Теперь открывается диалоговое окно Android Virtual Device Manager.

в этом окне выберите AVD и нажмите Edit

Теперь в разделе SD-карты выберите SIZE и установите 1024 MiB   в разделе "Оборудование" нажмите "Создать" и выберите "Максимальный размер кучи VM VM".   Теперь установите 100 (в зависимости от вашего приложения) Наконец нажмите "Редактировать AVD"

После редактирования нажмите кнопку обновления на sdk Manager

Теперь запустите приложение в AVD, ваша проблема решена.