android — Каковы преимущества установки значения LargeHeap в true?" />

Каковы преимущества установки значения LargeHeap в true?

У меня есть приложение с почти 50 классами. Я устанавливаю android:largeHeap="true", как показано ниже. Это хорошая практика?

<application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="Mall"
        android:largeHeap="true"
        android:logo="@drawable/logo_for_up"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme" >
</application>

Просьба указать преимущества и недостатки его использования.

У меня проблемы с памятью, поэтому я задаю этот вопрос.

73 голоса | спросил Muhammad Intsab Haider 10 WedEurope/Moscow2014-12-10T12:02:20+03:00Europe/Moscow12bEurope/MoscowWed, 10 Dec 2014 12:02:20 +0300 2014, 12:02:20

7 ответов


0

Слишком поздно для вечеринки, но я все равно предложу свои 0,02 $.
Использовать android:largeHeap="true" вот выдержка из Google, которая объясняет это,

  

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

вот полная ссылка на документацию https://developer.android.com/training/articles/memory.html

  

ОБНОВЛЕНИЕ

После мучительной работы с out of memory errors я бы сказал, что добавление этого в манифест, чтобы избежать проблемы с oom, не является грехом, также как @ Милад отмечает, что ниже это не влияет на нормальную работу приложения

  

ОБНОВЛЕНИЕ 2

Вот несколько советов по работе с out of memory errors

1) Используйте эти обратные вызовы, которые android предоставляет onLowMemory , onTrimMemory(int) и очистите кэш изображений, например (picasso, glide, fresco ....), о которых вы можете прочитать больше здесь и здесь
2) сжать ваши файлы (изображения, pdf)
3) читайте о том, как более эффективно обрабатывать растровые изображения здесь 4) Регулярно используйте пух перед выпуском продукции, чтобы код был гладким и    не громоздкий

ответил war_Hero 19 J0000006Europe/Moscow 2015, 08:01:26
0

Я думаю, что это очень эффективный вопрос, и позвольте мне добавить некоторые подробности о преимуществах и недостатках использования этой опции.

Что вы получаете:

  • Очевидно, вы получаете большую кучу, что означает снижение риска OutOfMemoryError.

Что вы теряете:

  • Вы можете потерять некоторые кадры, что может вызвать видимое зацепление . Большая куча заставляет сборку мусора занимать больше времени. Потому что сборщик мусора в основном должен пройти весь ваш живой набор объектов. Обычно время паузы при сборке мусора составляет около 5 мс, и вы можете подумать, что несколько миллисекунд не имеют большого значения. Но каждая миллисекунда считается. Устройство Android должно обновлять свой экран каждые 16 мс, и более длительное время GC может увеличить время обработки вашего кадра до барьера 16 миллисекунд, что может вызвать видимое зацепление.

  • Также переключение приложений будет выполняться медленнее . Система Android может уничтожать процессы в кеше LRU, начиная с процесса, который использовался не так давно, но также уделять внимание тому, какие процессы наиболее интенсивно используют память. Поэтому, если вы используете большую кучу, ваш процесс с большей вероятностью будет убит, когда он будет фоновым, что означает, что может потребоваться больше времени, когда пользователи захотят переключиться с других приложений на ваши. Также другие фоновые процессы с большей вероятностью будут выброшены, когда ваш процесс находится на переднем плане, потому что вашему приложению требуется больше памяти. Это означает, что переключение с вашего приложения на другое также занимает больше времени.

Заключение

Старайтесь не использовать параметр largeHeap в максимально возможной степени. Это может стоить вам заметного падения производительности и плохого пользовательского опыта.

ответил 김준호 16 Mayam16 2016, 11:44:33
0

На самом деле android: largeHeap является инструментом для увеличения выделенной памяти приложение.

Нет четкого определения необходимости использования этого флага. Если вам нужно больше памяти - Android предоставляет вам инструмент для ее увеличения. Но необходимость использования вы определяете сами.

ответил Sergey Shustikov 10 WedEurope/Moscow2014-12-10T12:08:26+03:00Europe/Moscow12bEurope/MoscowWed, 10 Dec 2014 12:08:26 +0300 2014, 12:08:26
0
  

У меня есть приложение с почти 50 классами

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

Вы также можете использовать библиотеки загрузки изображений, такие как Picasso , UIL или Скольжение . Все они имеют функцию кэширования изображений в памяти и /или на диске.

ответил Milad Faridnia 10 WedEurope/Moscow2014-12-10T12:46:55+03:00Europe/Moscow12bEurope/MoscowWed, 10 Dec 2014 12:46:55 +0300 2014, 12:46:55
0

Должны ли процессы вашего приложения создаваться с большой кучей Dalvik. Это относится ко всем процессам, созданным для приложения. Это относится только к первому приложению, загруженному в процесс; если вы используете общий идентификатор пользователя, чтобы разрешить нескольким приложениям использовать процесс, все они должны использовать этот параметр последовательно, иначе они будут иметь непредсказуемые результаты.

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

ответил Murali Ganesan 10 WedEurope/Moscow2014-12-10T12:04:12+03:00Europe/Moscow12bEurope/MoscowWed, 10 Dec 2014 12:04:12 +0300 2014, 12:04:12
0

Если вы должны использовать (и сохранить) большой объем памяти, тогда да, вы можете и должны использовать android: largeHeap = "true". Но если вы используете его, вы должны быть готовы к тому, что ваше приложение будет выгружено из памяти всякий раз, когда другие приложения находятся на переднем плане.

Под «быть готовым» я подразумеваю, что вы должны разрабатывать для этой вероятности, чтобы ваши методы onStop () и onResume () были написаны настолько эффективно, насколько это возможно, при этом гарантируя, что все соответствующие состояния сохраняются и восстанавливаются таким образом который представляет собой плавный вид для пользователя.

К этому параметру относятся три метода: maxMemory (), getMemoryClass () и getLargeMemoryClass ().

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

Когда вы используете параметр largeHeap, maxMemory () будет повышен до уровня, специфичного для устройства, а getMemoryClass () останется прежним.

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

maxMemory (), напротив, действительно ограничивает размер кучи, и поэтому вы получаете доступ к дополнительной куче за счет увеличения ее значения, а largeHeap действительно увеличивает это значение. Однако увеличенный объем кучи по-прежнему ограничен, и этот предел будет зависеть от устройства, что означает, что объем кучи, доступный для вашего приложения, будет варьироваться в зависимости от ресурсов устройства, на котором работает ваше приложение. Таким образом, использование largeHeap - это не приглашение для вашего приложения отказаться от всякой осторожности и пройти через шведский стол "все, что вы можете съесть".

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

Этот предыдущий пост включает обсуждение параметра largeHeap, а также ряд примеров того, какие объемы кучи доступны с использованием и без использования на нескольких конкретных устройствах Android:

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

Я не развернул ни одно из своих приложений с этим параметром, установленным в true. Тем не менее, в одном из моих приложений есть код, интенсивно использующий память, для компиляции набора параметров, связанных с оптимизацией, который выполняется только во время разработки. Я добавляю параметр largeHeap только во время разработки, чтобы избежать ошибок нехватки памяти при выполнении этого кода. Но я удаляю параметр (и код) перед развертыванием приложения.

ответил Carl 15 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 15 Sep 2018 10:59:05 +0300 2018, 10:59:05
0

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

Вы можете получить больше идей по этой ссылке: https://developer.android.com/topic/performance/memory

ответил Android Geek 13 J0000006Europe/Moscow 2018, 16:26:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132