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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Как кэшировать растровые изображения в встроенную память

  • JNI, чтобы помочь избежать OOM при использовании больших изображений

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

Используйте второй процесс. AndroidManifest новую Service AndroidManifest

 android:process=":second" 

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

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

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

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

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

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

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

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

Существует еще один альтернативный вариант, который используется для настройки настроек памяти. Все, что вам нужно сделать, это добавить / заменить существующую строку в файле gradle.properties.

org.gradle.jvmargs = -Xmx1024m

  • android.permission.CALL_PHONE для планшетов
  • Отключить прокруткуView Programmatically?
  • При создании POJO в Firebase вы можете использовать ServerValue.TIMESTAMP?
  • Как анимировать маркер в android-карте api V2?
  • Упаковка файлов ресурсов Android в распространяемом файле Jar
  • Использование SeekBar для управления объемом в Android?
  • Показать диалог из fragmentа?
  • Настройка Android с TextView для текста на иврите?
  • WebView и Cookies на Android
  • Как создать тему в уведомлениях FCM
  • Как написать стиль в текст ошибки EditText в Android?
  • Давайте будем гением компьютера.