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