Если вам необходимо использовать (и сохранить) большой объем памяти, то да, вы можете и должны использовать android:largeHeap="true"
. Но если вы все же используете его, вы должны быть готовы к тому, что ваше приложение будет удалено из памяти, когда другие приложения будут на переднем плане.
Под «быть готовы» , я имею в виду , что вы должны разработать для этой вероятности, так что ваши onStop()
и onResume()
методы написаны как можно более эффективно, обеспечивая при этом все уместна состояние сохраняется и восстанавливается таким образом , что представляет собой бесшовный внешний вид для пользователя.
Есть три способа , которые относятся к этому параметру: maxMemory()
, getMemoryClass()
и getLargeMemoryClass()
.
Для большинства устройств maxMemory()
будет представлять значение, аналогичное значению getMemoryClass()
по умолчанию, хотя последнее выражается в мегабайтах, а первое - в байтах.
Когда вы используете этот largeHeap
параметр, maxMemory()
он будет увеличен до более высокого уровня для конкретного устройства, в то время как getMemoryClass()
останется прежним.
getMemoryClass()
не ограничивает размер вашей кучи, но сообщает вам количество кучи, которое вы должны использовать, если хотите, чтобы ваше приложение функционировало комфортно и совместимо в пределах конкретного устройства, на котором вы работаете.
maxMemory()
Напротив, это ограничивает размер кучи, и так вы получите доступ к дополнительной куче путем увеличения его стоимости, и largeHeap
делает увеличение данным значения. Однако увеличенный объем кучи по-прежнему ограничен, и это ограничение будет зависеть от устройства, а это означает, что объем кучи, доступный вашему приложению, будет варьироваться в зависимости от ресурсов устройства, на котором работает ваше приложение. Таким образом, использование largeHeap
- это не приглашение для вашего приложения отказаться от всякой осторожности и пробиться сквозь буфет «все, что вы можете съесть».
Ваше приложение может точно определить, сколько памяти будет доступно на конкретном устройстве, с помощью largeHeap
параметра, вызвав метод getLargeMemoryClass()
. Возвращаемое значение выражено в мегабайтах.
Этот более ранний пост включает обсуждение largeHeap
параметра, а также ряд примеров того, какие объемы кучи доступны с его использованием и без него на нескольких конкретных устройствах Android:
Определить размер кучи приложения в Android
Я не развертывал ни одно из моих собственных приложений с этим параметром, установленным в значение true. Однако в одном из моих приложений есть код с интенсивным использованием памяти для компиляции набора параметров, связанных с оптимизацией, который выполняется только во время разработки. Я добавляю largeHeap
параметр только во время разработки, чтобы избежать ошибок нехватки памяти при запуске этого кода. Но я удаляю параметр (и код) перед развертыванием приложения.