Как ActivityManager понимает что надо вызывать onResume у конкретной Activity

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

Ответ

ActivityManager взаимодействует с WindowManager и другими системными сервисами для отслеживания состояния приложения. Когда Activity становится видимой и получает фокус, система через ActivityThread вызывает handleResumeActivity(), который в свою очередь триггерит onResume().

Ключевые моменты:

  1. Видимость – Activity должна быть в стеке и не перекрыта другими окнами
  2. Фокус – Должна получить возможность обрабатывать пользовательский ввод
  3. Жизненный цикл – Предыдущее состояние было onStart() или onPause()

Пример вызова:

// Внутри ActivityThread
fun handleResumeActivity(token: IBinder, finished: Boolean, isForward: Boolean) {
    val r = performResumeActivity(token, finished) // вызывает onResume()
    if (r.window != null) {
        wm.addView(decor, l) // Добавляет в WindowManager
    }
}