Как Android понимает какой процесс можно остановить

«Как Android понимает какой процесс можно остановить» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Foreground (видимый процесс) – активное приложение с видимым Activity или запущенным Service с startForeground(). Наивысший приоритет.
  2. Visible – приложение с частично видимым Activity (например, прозрачное или диалоговое окно).
  3. Service – фоновый Service без startForeground().
  4. Cached – процессы без активных компонентов, но сохранённые для быстрого запуска.
  5. Empty – процессы без активных компонентов, убиваются первыми.

Пример проверки важности процесса:

val am = getSystemService(ACTIVITY_SERVICE) as ActivityManager
val runningProcesses = am.runningAppProcesses
runningProcesses.forEach { process ->
    Log.d("ProcessPriority", "${process.processName}: ${process.importance}")
}

Система убивает процессы от низшего приоритета к высшему, освобождая ресурсы.