← Назад к вопросам

Какие приложения Android очищает из памяти

2.0 Middle🔥 141 комментариев
#Android компоненты#JVM и память

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Механизм очистки памяти в Android

В Android управление памятью — сложный процесс, который балансирует между обеспечением быстрого доступа к часто используемым приложениям и эффективным использованием ограниченных системных ресурсов. Очистка из памяти — это не «ручное» действие пользователя или системы против конкретного приложения, а результат работы системы управления памятью (Memory Management System) и ее алгоритмов.

Что определяет «убийство» процесса?

Система Android постоянно отслеживает состояние памяти (RAM). Когда свободная память становится критически низкой, Low Memory Killer (LMK) — ключевый компонент ядра Linux, адаптированный для Android — начинает освобождать ресурсы. Он не удаляет приложения из списка установленных, а убивает их процессы, то прекращает их выполнение в памяти.

Критически важно: решение о том, какой процесс будет убит, основано не на названии приложения или его популярности, а на приоритете процесса (Process Priority) и его текущем состоянии.

Приоритеты процессов и OOM Adjust

Android назначает каждому процессу значение OOM (Out-Of-Memory) Adjust Score. Это числовой показатель, где меньшее значение означает более высокий приоритет и меньшую вероятность быть убитым. Система сортирует все процессы по этому значению и начинает убивать с наивысшего (самых низкоприоритетных), пока не освободится достаточное количество памяти.

Пример категорий процессов и их примерных приоритетов (в реальности они могут варьироваться):

  • FOREGROUND_APP (OOM adjust: 0):** Приложение с активным окном на экране (текущее). Имеет наивысший приоритет.
  • VISIBLE_APP (OOM adjust: 1-2):** Приложение, которое видно пользователю частично (например, в диалоговом окне или неактивное, но видимое). Приоритет очень высокий.
  • PERCEPTIBLE_APP (OOM adjust: 3-4):** Приложение, которое не видно, но ощущается пользователем (например, играет музыку в фоне). Приоритет высокий.
  • BACKGROUND_APP (OOM adjust: 5-6):** Приложение, работающее в фоне без прямого взаимодействия с пользователем (например, синхронизация данных). Это основные кандидаты на очистку.
  • CACHED_APP (OOM adjust: 7+): Приложения, процессы которых полностью остановлены, но их состояние сохранено для быстрого перезапуска. Это «кэшированные» приложения. Они имеют самый низкий приоритет и убиваются первыми при необходимости освобождения памяти.
// Пример (очень упрощенный) логики, которая может быть в системе:
fun shouldKillProcess(oomScore: Int, currentMemoryPressure: MemoryPressure): Boolean {
    // Если давление памяти высокое, начинаем убивать процессы с высоким OOM_SCORE
    return currentMemoryPressure == MemoryPressure.CRITICAL && oomScore > THRESHOLD_BACKGROUND
}

Какие приложения очищаются чаще всего?

  1. Кэшированные приложения (Cached Apps):** Это приложения, которые были запущены ранее, но сейчас не активны. Их процесс убит, но система сохраняет некоторую информацию для быстрого восстановления. Они — первый источник памяти для системы.

  2. Фоновые сервисы без важных объявлений (Background Services):** Сервисы, работающие в фоне, но не объявившие себя как персистентные (persistent) или приоритетные (foreground service с уведомлением). Например, старый фоновый загрузчик файлов.

  3. Приложения с «неправильным» управлением памятью:** Приложения, которые сами вызывают высокое потребление памяти (утечки, большие Bitmap в памяти), могут быть убиты вне зависимости от приоритета, чтобы спасти всю систему от коллапса (OutOfMemoryError).

  4. Приложения, зависящие от «энергоэффективности» (Doze Mode, App Standby):** На современных Android (особенно с Doze Mode и App Standby) приложения, которые долго не использовались и работают в фоне, могут быть ограничены, а их процессы — убиты, для сохранения батареи.

Как разработчик может повлиять на вероятность выживания?

  • Использование Foreground Services с уведомлением:** Для критических задач (например, загрузка файла).
  • Правильная работа с жизненным циклом (Lifecycle):** Освобождение ресурсов в onPause() и onStop().
  • Минимизация потребления памяти:** Эффективное использование кэшей, оптимизация изображений.
  • Объявление приложения как «персистентного» (persistent):** Через атрибут android:persistent="true" в манифесте (но это доступно только системным приложениям).

Итог

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

Какие приложения Android очищает из памяти | PrepBro