Кто вызывает метод onResume

Ответ

Метод onResume() вызывается системой Android, когда активность переходит в состояние "Resumed" (активное и видимое). Это происходит:

  1. После onStart(), когда активность становится видимой
  2. После возврата из другой активности (например, после onPause())
  3. После возобновления из свернутого состояния

Пример сценария:

override fun onResume() {
    super.onResume()
    // Возобновляем анимации, обновляем данные
    sensorManager.registerListener(this, accelerometer, SENSOR_DELAY_NORMAL)
}

Важно: onResume() всегда вызывается в UI-потоке, поэтому тяжелые операции здесь выполнять нельзя.

Ответ 18+ 🔞

А, ну это же классика, ёпта! Смотри, сейчас объясню на пальцах, как этот onResume() работает, а то в документации написано так, что волнение ебать — ни черта не понятно.

Представь, что твоё приложение — это мужик, который прилёг на диван посмотреть телек. onResume() — это тот самый момент, когда он уже не просто валяется, а уперся глазами в экран и готов смотреть. Активность видна, поверх неё ничего не лежит, и пользователь может с ней взаимодействовать. Идеальное состояние, блядь!

Вызывается этот метод в трёх основных случаях, запоминай:

  1. Сразу после onStart(), когда активность впервые появляется на экране. Сначала система говорит "окей, начинаем" (onStart), а потом сразу "всё, внимание, работаем!" (onResume).
  2. Когда возвращаешься из другой активности. Допустим, ты тыкнул на уведомление или перешёл в настройки — твоя активность ушла на паузу (onPause). Как только ты из тех настроек вернёшься назад, система тебя "разбудит" вызовом onResume. Типа "эй, просыпайся, снова твой черёд!"
  3. После того, как свернул и развернул приложение. Нажал кнопку "домой" — активность заснула. Снова открыл её из списка недавних — оп! — onResume. "Отоспался? Теперь давай, шевелись!"

Вот смотри, живой пример, где это нужно:

override fun onResume() {
    super.onResume()
    // Тут обычно включаешь всё, что было на паузе
    sensorManager.registerListener(this, accelerometer, SENSOR_DELAY_NORMAL) // Снова слушаем датчики
    videoView.start() // Возобновляем видео, которое на паузе стояло
    updateDataFromNetwork() // Обновляем данные, которые могли устареть, пока мы в другом окне были
}

Но есть одна хитрая жопа, о которой все забывают! Метод onResume() выполняется в UI-потоке, главном потоке приложения. Если ты тут начнёшь делать какую-то тяжёлую хуйню — типа качать гигабайты с сети или сложную математику расчётывать — то интерфейс просто зависнет, и пользователь увидит "Application Not Responding". Сам от себя охуеешь, когда такое произойдёт.

Так что правило простое: в onResume() только быстрая подготовка к показу — запусти анимацию, подпишись на датчики, обнови пару полей. Всё, что требует времени, — выноси в отдельный поток или в ViewModel. И тогда всё будет пизда рулю, а не накроется медным тазом.