Приоритет приложения в Android определяется на основе нескольких факторов, главные из которых:
- Активность компонента: Приложение, у которого есть активные компоненты (активности на переднем плане, сервисы, запущенные с
startForeground), имеет более высокий приоритет.
- Использование ресурсов: Приложения, активно использующие CPU или занимающие много памяти, могут быть помечены системой как менее приоритетные для сохранения ресурсов для более важных задач.
- Связь с пользовательским интерфейсом: Приложения, которые напрямую взаимодействуют с пользователем в данный момент, получают самый высокий приоритет.
- Связь с процессами с более высоким приоритетом: Процесс, к которому привязан компонент (например, сервис, к которому подключена активность), наследует приоритет более высокого процесса.
Система Android использует эти факторы для определения "градации важности" (importance level) приложения, которая в конечном итоге определяет, насколько вероятно будет завершен (убит) его процесс при нехватке памяти.
Основные уровни важности процессов:
- Foreground process: Наиболее важный процесс. Приложение с активностью на видимом экране, сервисом, запущенным с
startForeground, или использующее определенные API (например, связанное с другой активностью на переднем плане). Никогда не завершается системой, если только не исчерпаны критические ресурсы.
- Visible process: Процесс, который не имеет компонентов на переднем плане, но влияет на то, что видит пользователь. Например, процесс, содержащий сервис, связанный с активностью на переднем плане.
- Service process: Процесс, содержащий сервис, запущенный с помощью
startService и не помеченный как foreground service. Может быть завершен, когда нехватка памяти становится серьезной.
- Cached process: Процесс, не содержащий активных компонентов и сохраненный в памяти для более быстрого возобновления работы. Наименее важный процесс и наиболее вероятный кандидат на завершение при нехватке памяти.