Якщо ви повинні використовувати (і зберегти) великий об'єм пам'яті, то так, ви можете і повинні використовувати android:largeHeap="true"
. Але якщо ви все-таки користуєтесь цим, вам слід бути готовим до того, що ваш додаток буде видалено з пам'яті, коли інші програми стоять на першому плані.
Під «будьте готові» я маю на увазі, що ви повинні створити цю ймовірність, щоб ваші onStop()
та onResume()
методи були написані якомога ефективніше, забезпечуючи збереження та відновлення всіх відповідних станів таким чином, що представляє користувачеві безперебійний вигляд.
Є три способи , які відносяться до цього параметру: maxMemory()
, getMemoryClass()
і getLargeMemoryClass()
.
Для більшості пристроїв maxMemory()
буде представляти аналогічне значення getMemoryClass()
за замовчуванням, хоча останній виражається в мегабайтах, тоді як перший виражається в байтах.
При використанні largeHeap
параметра maxMemory()
він буде збільшений до конкретного пристрою вищого рівня, при getMemoryClass()
цьому залишиться колишнім.
getMemoryClass()
не обмежує розмір нагромадження, але він повідомляє вам кількість купи, яку ви повинні використовувати, якщо ви хочете, щоб ваш додаток працював комфортно і сумісно в межах конкретного пристрою, на якому ви працюєте.
maxMemory()
Навпаки, це обмежує розмір купи, і так ви отримаєте доступ до додаткової купі шляхом збільшення його вартості, і largeHeap
робить збільшення даними значення. Однак збільшена кількість купи все ще обмежена, і ця межа буде залежати від пристрою, а це означає, що кількість купи, доступної вашому додатку, буде змінюватися в залежності від ресурсів пристрою, на якому працює ваш додаток. Таким чином, використання largeHeap
не є запрошенням для вашої програми відмовитися від будь-якої обережності та проглянути свій шлях через шведський стіл, який можна їсти.
Ваш додаток може точно визначити, скільки пам’яті було б доступно на певному пристрої за допомогою largeHeap
параметра, посилаючись на метод getLargeMemoryClass()
. Повернене значення знаходиться в мегабайтах.
Ця попередня публікація включає обговорення largeHeap
параметра, а також ряд прикладів того, яка кількість купи доступна за допомогою та без її використання на кількох конкретних пристроях Android:
Виявлення розміру купи додатків в Android
Я не розгорнув жоден власний додаток із цим параметром, встановленим на true. Однак у мене є деякий об'єм пам'яті в одному з моїх додатків для складання набору параметрів, пов'язаних з оптимізацією, який працює лише під час розробки. Я додаю largeHeap
параметр лише під час розробки, щоб уникнути помилок пам'яті під час виконання цього коду. Але я видаляю параметр (і код) перед розгортанням програми.