Распределение памяти Android - PullRequest
16 голосов
/ 25 января 2010

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

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

Ответы [ 4 ]

36 голосов
/ 25 января 2010

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

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

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

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

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

андроида: largeHeap = "истинный"

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

11 голосов
/ 25 января 2010

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

6 голосов
/ 07 февраля 2011

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

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

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

0 голосов
/ 21 августа 2012

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

Перейдите в каталог Android SDK и
запустить менеджер sdk (Инструменты-> Android запустить этот файл)

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

Теперь открыто диалоговое окно диспетчера виртуальных устройств Android ..

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...