Чем загружена оперативная память андроид

Как очистить оперативную память на телефоне Андроид [освобождение ОЗУ]

Здравствуйте.

Вообще, Андроид достаточно «умная» система, и многие моменты в ней работают автоматически (чем существенно облегчают жизнь пользователям). Наверное, если бы это было не так, эта система не стала бы такой популярной!

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

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

В этой заметке приведу несколько наиболее простых способов выполнения этой задачи. И так.

Способы освободить оперативную память [Андроид]

#1 — через встроенную функцию

Практически во всех версиях Андроид, чтобы закрыть все открытые приложения (а значит и высвободить ОЗУ), достаточно сначала нажать на кнопку «☐», а затем на значок корзины. После, всё, что было открыто и активно работало, будет закрыто и часть памяти станет свободна.

Просмотр активных приложений

Как это выглядит на Андроид 5.0 — представлено на скрине ниже.

Закрыть все активные приложения / Андроид 5.0

На Андроид 8.0. все выполняется аналогично: только система в конце операции еще и сообщит о том, сколько памяти было высвобождено.

Освобождено 777 МБ памяти (свободно 2,88 ГБ памяти) / Андроид 8.0

#2 — через меню настроек

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

Делается это достаточно просто. Сначала открываем настройки Андроид раздел «Приложения» .

После переходим во вкладку «Работающие» : должен появиться список работающих приложений. Далее просто смотрите, какие из них больше всего расходуют память и закройте те, которые вы не используете. Ниже на скрине представлен пример (на Андроид 5.0), как за 2 клика было освобождено

Пример освобождения ОЗУ / Андроид 5.0 / Кликабельно

На Андроид 8.0, кстати, есть даже более удобная вкладка: «Настройки/Память/Память/Использование памяти приложениями» (см. скрин ниже).

Использование памяти приложениями (Андроид 8.0) /Кликабельно

В ней представлены все приложения, которые использовали ОЗУ в последние 3, 6, 12 часов (причем, список можно отсортировать от большего к меньшему). Ознакомившись с этим списком, достаточно быстро можно оценить, что стоило бы закрыть (например, если у вас не хватает памяти — то, наверное, не стоит держать работающими 2 браузера, 2 ПО для отслеживания погоды и пр.) .

#3 — с помощью спец. приложений для ускорения

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

У меня на блоге, кстати говоря, уже была заметка по этой теме (ссылка ниже).

Например, приложение AMC Cleaner за 2-3 клика пальцем по экрану способно не только высвободить ОЗУ, но и очистить устройство от мусора, оптимизировать нагрузку на ЦП (за счет чего снизить его температуру). Скрины приведены ниже.

Высвобождено 113 МБ ОЗУ / AMC Cleaner

Кроме того, кстати, AMC Cleaner позволяет найти различные дубли и не используемые картинки, фото, музыку и пр. файлы. Порой, речь может идти на гигабайты!

Очистка повторных и ненужных картинок / AMC Cleaner

Кстати, аналогов у того же AMC Cleaner хватает. Весьма неплохой функционал у еще одного приложения из этой категории: Clean Master (очень знаменитая программа, более 100 млн. пользователей по всему Миру!) .

Читайте также:  Как удалить apk файл андроид

Позволяет быстро навести порядок на телефоне: повысить безопасность, удалить мусор, охладить ЦП и пр. Скрины работы представлены ниже.

Clean Master — скрины работы приложения

На этом пока всё. Дополнения по теме приветствуются.

Источник

Как освободить оперативную память (ОЗУ) на Android

Оперативной памяти много не бывает и это утверждение чувствуют на себе даже владельцы мобильных устройств под управлением операционной системы Андроид с установленными 3 и более Гб ОЗУ. Те же, кто использует менее производительные девайсы с 1-2 Гб оперативной памяти начинают замечать замедление работы практически сразу после начала активного использования устройства.

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

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

Очистка ОЗУ от ненужных приложения в Андроид

Первый и самый простой способ очистки ОЗУ от уже якобы закрытых программ, это использование менеджера приложений. Он появился в пятом Андроиде, вызывается в разных устройствах по-разному, например, удержанием кнопки «Домой», тапом по «Меню» на главном экране или настраиваемой кнопкой. После запуска менеджера пользователь видит на экране образы экранов ранее открытых приложений. Очистка памяти в этом случае может производиться:

Выборочно, свайпом ненужного приложения в сторону или вверх.

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

Встроенная утилита Android 7.0 и выше

Начиная с 7-ой версии Андроид, в системе появилось дополнительное приложение, получившее название «Безопасность». Это набор утилит для управления безопасностью и оптимизацией устройства. Здесь в аспекте экономии ОЗУ нас интересуют два режима:

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

Разрешения – режим, где следует зайти в пункт «Автозапуск», и запретить запуск приложений, которыми вы пользуетесь изредка. Например, если вы не пользуетесь Фейсбуком для связи, а лишь изредка просматриваете страницу, нет смысла разрешать ему автозагрузку и, тем самым, занимать память даже если вы им не пользовались.

В смартфонах Samsung, зайдите в настройки и выберет раздел «Оптимизация», где есть иконка «ОЗУ», зайдя в неё вы сможете освободить память и закрыть ненужные приложения.

Освобождение памяти при помощи сторонней утилиты

Для владельцев смартфонов, которые хотят иметь возможность в любой момент очистить оперативную память, на версиях ниже Андроид 7.0 оптимальным вариантом борьбы с мусором памяти можно назвать приложение Clean Master. Скачиваем приложение:

Для очистки памяти потребуется зайти в приложение и выбрать режим «Ускорение телефона», после чего очистить ОЗУ от всех приложений или выборочно. Также приложение создает на экране ярлык, нажатие на который очищает память без лишних вопросов.

Обратите внимание, что Clean Master является набором инструментов, который сам по себе замедляет работу устройства, поэтому необходимо пройтись по настройкам и отключить ненужные вам инструменты.

Источник

Большие требования к памяти в Android – что делать?

Здравствуйте, уважаемые читатели.

Сегодня предлагаем вашему вниманию небольшой материал о грамотном использовании памяти в Android.

Приятного чтения!

Эта статья посвящена базовым приемам управления использованием памяти в приложениях – например, в браузерах, фоторедакторах и программах для просмотра PDF – в которых предъявляются большие запросы к памяти.

Для начала немного теории

Большинство приложений для Android работают поверх среды исполнения (ART), заменившей ныне устаревающую виртуальную машину Dalvik. ART и Dalvik похожи на виртуальную машину Java (JVM), с которой их роднят схожие принципы проектирования. Они используют для хранения данных приложений два отдельных пространства: стек и кучу.

Читайте также:  Смс баланс для андроида

Стек-память в Java используется для хранения локальных переменных (примитивных типов и ссылок на объекты). Каждый поток Java имеет собственный отдельный стек. Стек-память относительно невелика по сравнению с памятью кучи. Размер стека Java в Dalvik обычно составляет 32 KB для кода Java и 1 MB для нативного кода (C++/JNI). В ART появился унифицированный стек для Java и C++, размер которого составляет около 1 MB.

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

Память кучи в Java используется виртуальной машиной для выделения объектов. Когда бы ни создавался объект, это происходит в куче. Виртуальные машины, например, JVM или ART, выполняют регулярную сборку мусора, убирают все объекты, на которые больше не осталось ссылок, и таким образом высвобождают память для выделения новых объектов.
Для обеспечения удобства использования Android жестко ограничивает размеры кучи для каждого работающего приложения. Предельный размер кучи варьируется от устройства к устройству и зависит от того, сколько RAM на этом устройстве. Если ваше приложение достигает предельного размера кучи и пытается выделить еще памяти, то выдается ошибка OutOfMemoryError , и приложение завершается. Давайте рассмотрим некоторые примеры, помогающие избежать такой ситуации.

Анализ памяти кучи

Самый важный инструмент, позволяющий разобраться с проблемами памяти в ваших приложениях и понять, как используется память – это профилировщик памяти, доступный в Android Studio.

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

Типичный сеанс работы с профилировщиком памяти должен выглядеть так:

  • Отсматриваем наиболее частые выделения памяти и проходы сборщика мусора для выявления возможных проблем с производительностью.
  • Отсматриваем, как использовалась память с течением времени, в особенности такие операции, на которые, как известно, требуется выделять много памяти. Убедитесь, что после завершения этих операций использование памяти снижается. Например, ниже показано, как воздействует на память активность PdfActivity из PSPDFKit после загрузки документа.
  • Делаем дамп кучи в разные моменты времени исполнения вашего приложения и проверяем, как используется память. Ищем большие объекты, которые хранятся в памяти и не подпадают под сборку мусора. Дампы кучи также помогают выявить утечки памяти – например, можно поискать в дампе кучи ваши активности и посмотреть, были ли собраны их старые экземпляры.

Утечки памяти

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

Образцовое решение для выявления утечек в памяти – библиотека LeakCanary. Она автоматически выдает уведомления, когда в вашей тестовой сборке (development build), выдавая вам стектрейс утечки в UI этой программы. Можно (и следует) интегрировать ее уже сегодня, тем более, что это не сложно!

Особенно легко спровоцировать утечки памяти, работая со сложными жизненными циклами активностей или фрагментов Android. Такое часто случается в тех точках, где разработчики удерживают сильные ссылки на контексты UI или другие UI-специфичные объекты в фоновой задаче или в статических переменных. Один из способов спровоцировать такие задержки – активно покрутить устройство, когда тестируете ваше приложение.

Высвобождайте память в ответ на события

Android может затребовать у приложения выделенную память или просто принудительно завершить его, когда память необходимо высвободить для выполнения более критичных задач. Прежде, чем это произойдет, система позволит вам отдать всю память, которая вам не нужна. В вашей активности понадобится реализовать интерфейс ComponentCallbacks2 . В таком случае, всякий раз, когда ваша система будет испытывать дефицит памяти, поступит вызов к вашему методу onTrimMemory() , и вы сможете высвободить память или отключить те возможности, которые не будут работать в таких условиях дефицита памяти.

Читайте также:  The android net mtp device

Так, подобные обратные вызовы обрабатываются в приложении PSPDFKit. Приложение PSPDFKit проектировалось с расчетом активного использования памяти для кэширования, чтобы работа с приложением шла как можно более гладко. Исходно неизвестно, сколько памяти доступно на устройстве, поэтому PSPDFKit адаптируется к ситуации и ограничивает использование памяти, когда получает уведомления о том, что памяти недостаточно. Поэтому приложения, интегрированные с PSPDFKit, работают даже на низкотехнологичных устройствах, но со сниженной производительностью из-за того, что кэширование отключено.

Большая куча

Одно из лобовых решений, позволяющих справиться с высокими требованиями к памяти – запросить большую кучу Dalvik для вашего приложения. Для этого можно добавить android:largeHeap=»true» к тегу в файле AndroidManifest.xml .

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

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

Проверка, сколько памяти сможет использовать ваше приложение

Никогда не помешает проверить, насколько велика куча вашего приложения и динамически адаптировать ваш код и доступные возможности под эти пределы памяти. Можно прямо во время исполнения проверить максимальный размер кучи при помощи методов getMemoryClass() или getLargeMemoryClass() (когда включена большая куча).

Android поддерживает даже такие устройства, на которых всего 512 MB RAM. Убедитесь, что не обошли вниманием и низкотехнологичные устройства! При помощи метода isLowRamDevice() можно проверить, не запущено ли ваше приложение на таком устройстве, где мало доступной памяти. Точное поведение этого метода зависит от устройства, но обычно он возвращает true на тех устройствах, где меньше 1 GB RAM. Нужно убедиться, что ваше приложение корректно работает и на этих устройствах, и на них отключать все возможности, использующие большой объем памяти.

Подробнее о том, как Android работает на устройствах с малым объемом памяти, можно почитать здесь; здесь же даются дополнительные советы по оптимизации.

Используйте оптимизированные структуры данных

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

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

К другим структурам данных, неэффективным с точки зрения использования памяти, относятся различные сериализации. Да, действительно, форматы XML или JSON удобны в использовании, можно сократить использование памяти, если работать с более эффективным двоичным форматом, например, буферами протоколов.

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

Предотвращайте перемешивание памяти

Виртуальные машины Java/Android выделяют объекты очень быстро. Сборка мусора также идет весьма быстро. Однако при выделении большого количества объектов за короткий промежуток времени можно столкнуться с проблемой под названием «перемешивание памяти» (memory churn). В таком случае виртуальная машина не будет успевать выделять объекты в таком темпе, а сборщик мусора – их утилизировать, и приложение начнет притормаживать, а в экстремальных случаях даже израсходует всю память.

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

Пример ситуации, приводящей к перемешиванию памяти – выделение больших объектов, например, Paint внутри метода onDraw() представления. В таком случае быстро создается много объектов, и может начаться сборка мусора, которая может негативно повлиять на работу этого представления. Как указывалось выше, всегда нужно отслеживать использование памяти, чтобы избегать таких ситуаций.

Источник

Оцените статью