В каком методе AppDelegate следует останавливать воспроизведение видео: applicationWillResignActive или applicationDidEnterBackground?

«В каком методе AppDelegate следует останавливать воспроизведение видео: applicationWillResignActive или applicationDidEnterBackground?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Лучше использовать applicationWillResignActive.

Почему?

  • applicationWillResignActive вызывается немедленно при любом переходе приложения в неактивное состояние (входящий звонок, открытие Control Center, перетягивание шторки уведомлений). Это обеспечивает мгновенную реакцию.
  • applicationDidEnterBackground вызывается только после полного сворачивания приложения (пользователь нажал Home или переключил приложение). Между этими событиями может быть задержка, в течение которой видео продолжит воспроизводиться.

Пример реализации:

func applicationWillResignActive(_ application: UIApplication) {
    // Немедленная остановка при потере фокуса
    videoPlayer.pause()
}

func applicationDidBecomeActive(_ application: UIApplication) {
    // Возобновление, если приложение снова в фокусе
    if shouldResumePlayback {
        videoPlayer.play()
    }
}

Исключение: Если ваше приложение имеет право на воспроизведение аудио/видео в фоне (например, музыкальный плеер), логику паузы следует перенести в applicationDidEnterBackground и проверять тип контента.