Когда вызывается метод onPause в Activity

Ответ

Метод onPause() вызывается, когда Activity теряет фокус, но ещё видна (например, при появлении диалога или другой Activity в полупрозрачном режиме). Также вызывается перед onStop(), если Activity полностью закрывается. В этом методе следует сохранять данные, останавливать анимации или ресурсоёмкие операции, так как следующая Activity не будет запущена, пока onPause() не завершится.

Пример:

override fun onPause() {
    super.onPause()
    saveUserData() // Сохранение данных
    stopMediaPlayer() // Остановка медиа
}

Ответ 18+ 🔞

А, ну это же классика, ёпта! Смотри, есть у тебя эта самая Activity — она как бы главное окно в приложении. И вот представь: ты сидишь, ковыряешься в нём, и тут вдруг сверху вылезает какая-нибудь мартышлюшка — например, диалог с вопросом «Разрешить доступ к фоткам?» или полупрозрачное окошко.

Вот в этот самый момент система и кричит твоей Activity: «Эй, дружок, внимание на минуточку!». И вызывается метод onPause(). Твоя Activity ещё не закрыта, она на заднем плане, её кусочек видно, но фокус уже не у неё. Ещё этот метод вызовется прямо перед полным закрытием, прямо перед onStop().

И вот тут, чувак, самое время не проёбываться. Потому что следующая активность или диалог не запустятся, пока твой onPause() не отработает. Значит, нельзя тут тянуть резину, делать долгие операции — пользователь охуеет от лагов. Но! Это последний более-менее гарантированный шанс перед тем, как тебя могут прибить.

Что тут обычно делают? Да всё важное, что нельзя потерять:

  • Сохраняют данные пользователя (чтобы он, не дай бог, полчаса вводил текст, а ты всё похерил).
  • Останавливают анимации, музыку или видео — чтобы два медиаплеера не орали одновременно, будто гомосеки налетели.
  • Отпускают какие-нибудь монопольные ресурсы (типа камеры).

Смотри на пример кода, тут всё просто:

override fun onPause() {
    super.onPause() // Эту строчку не забывай, а то родительский класс обидется
    saveUserData() // Быстренько сохраняем данные
    stopMediaPlayer() // Глушим музыку/видео
}

Короче, правило простое: onPause() — это как сигнал «всем задраить люки, шторм на подходе». Быстро, чётко, без долгих проводов. А то доверия к тебе, блядь, ноль будет, если приложение будет висеть на каждом диалоге.