Как увеличить размер кучи приложения для Android?

Я пишу приложение для Android, которое использует несколько 3D-моделей. Такая модель с текстурами может занимать много памяти. Я узнал, что производитель устанавливает ограничение на размер кучи, который может использовать приложение. Например, мой планшет Samsung Galaxy Tab 8.9 P7310 может занимать 64 МБ памяти.

Есть ли способ увеличить размер памяти, которую может использовать приложение?

Ответ 1

Вы можете использовать android: largeHeap = "true" для запроса большего размера кучи, но это не будет работать на каких-либо устройствах с предварительной сотой. На устройствах версии 2.3 вы можете использовать класс VMRuntime, но это не будет работать на Gingerbread и выше.

Единственный способ максимально возможного ограничения - делать задачи с интенсивной памятью через NDK, поскольку NDK не налагает ограничения памяти, такие как SDK.

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

Ответ 2

Есть ли способ увеличить размер памяти, которую может использовать приложение?

Приложения, работающие на уровне API 11+, могут иметь android:largeHeap="true" в элементе <application> в манифесте, чтобы запросить размер кучи размером больше обычного, а getLargeMemoryClass() на ActivityManager расскажет вам, насколько велика эта куча является. Однако:

  • Это работает только на уровне API 11+ (т.е. Honeycomb и выше)

  • Нет гарантии, насколько большой будет большая куча

  • Пользователь будет воспринимать ваш запрос большой кучи, потому что он заставит другие приложения из ОЗУ прекратить процессы других приложений, чтобы освободить оперативную память системы для использования вашей большой кучей

  • Из-за # 3 и того факта, что я ожидаю, что android:largeHeap будет злоупотреблять, поддержка этого может быть оставлена ​​в будущем, или пользователь может быть предупрежден об этом во время установки (например, вы необходимо будет запросить для него специальное разрешение)

  • В настоящее время эта функция легко документирована

Ответ 3

вы не можете увеличить размер кучи динамически.

вы можете запросить больше использовать с помощью android:largeHeap="true" в манифесте.

также вы можете использовать native memory (NDK & JNI), поэтому вы фактически обходите ограничение размера кучи.

вот несколько сообщений, которые я сделал об этом:

и вот библиотека, которую я сделал для нее:

Ответ 4

Использовать второй процесс. Объявите в AndroidManifest новом Service с помощью

android:process=":second"

Обмен между первым и вторым процессом поверх BroadcastReceiver

Ответ 5

Из того, что я помню, вы могли бы использовать класс VMRuntime в ранних версиях Android, но теперь вы просто не можете больше.

Я не думаю, что позволить разработчику выбирать размер кучи в мобильной среде можно считать настолько безопасным, хотя. Мне кажется, что вы можете найти способ изменить размер кучи в определенном устройстве (а не на стороне программирования), пытаясь изменить его из самого приложения.

Ответ 6

Это можно сделать двумя способами в соответствии с вашей ОС Android.

  • Вы можете использовать android:largeHeap="true" в теге приложения манифеста Android, чтобы запросить больший размер кучи, но это не будет работать на каких-либо устройствах предварительной сотовой связи.
  • На устройствах версии 2.3 вы можете использовать класс VMRuntime, но это не будет работать на Gingerbread и выше. См. ниже, как это сделать.
VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE);

Перед настройкой HeapSize убедитесь, что вы ввели соответствующий размер, который не повлияет на работу другого приложения или ОС. Перед установкой достаточно проверить размер вашего приложения, а затем установить размер только для выполнения вашей работы. Не используйте так много памяти, иначе могут повлиять другие приложения.

Ссылка: http://dwij.co.in/increase-heap-size-of-android-application

Ответ 7

Увеличение Java-кучи несправедливо ест нехватку мобильных ресурсов. Иногда достаточно просто подождать сборщика мусора, а затем возобновить операции после сокращения кучи. Используйте этот статический метод.