Как определить, когда приложение перемещается в переключатель задач и продолжает работать

У меня есть приложение, в котором я очищаю некоторый пользовательский интерфейс, когда приложение переходит в фоновый режим. Уведомление о перемещении приложения в фоновый режим происходит, если, например, на iPad пользователь проводит пальцем вверх, чтобы вызвать переключатель задач. Однако приложение продолжает работать, пока переключатель задач открыт. Как я могу отличить это от приложения, которое перемещается в фоновый режим и не отображается в переключателе задач? Интересно, что если я запускаю приложение из Xcode, приложение не продолжает работу в переключателе задач. Однако, если он не подключен к Xcode, он продолжается.

В целях отладки я связал делегат приложения с контроллером основного представления, чтобы я мог отправлять сообщения для отображения, когда делегат приложения получает вызовы. Я сделал это, потому что поведение не происходит при подключении к Xcode, поэтому печать не будет работать. Я еще не нашел метод или уведомление, указывающее на это состояние.


person Victor Engel    schedule 16.05.2021    source источник
comment
Разве функция sceneWillResignActive(_:) SceneDelegate не запускается при вызове переключателя задач? developer.apple.com/documentation/uikit/uiscenedelegate/   -  person West1    schedule 16.05.2021
comment
Приложение не имеет SceneDelegate. Однако я могу наблюдать за уведомлениями делегатов сцены. Я опубликую свои результаты в ответ.   -  person Victor Engel    schedule 16.05.2021
comment
Мне нужно было различать UIScene.didEnterBackgroundNotification, где мне нужно было приостановить все действия, и UIScene.willDeactivateNotification, где я мог продолжать работу приложения (например, пока он виден в переключателе задач).   -  person Victor Engel    schedule 16.05.2021


Ответы (1)


Вот поток приложения с указанием конкретных вызовов функций или вызовов уведомлений.

Приложение запущено.

viewDidAppear в viewController называется

UIScene.didActivateNotification получено уведомление.

applicationDidBecomeActive: вызывается в AppDelegate.

Переключатель задач вызывается легким движением снизу вверх на iPad.

UIScene.willDeactivateNotification получено уведомление.

applicationWillResignActive: вызывается в AppDelegate.

Отпустить переключатель задач, чтобы приложение осталось на экране, но значки теперь отображаются над приложением внизу (перестаньте перемещаться после кратковременного перемещения)

UIScene.didActivateNotification получено уведомление.

applicationDidBecomeActive: вызывается в AppDelegate.

Снова переключатель задач — на этот раз продолжайте панорамирование, пока в переключателе задач не появятся несколько приложений

UIScene.willDeactivateNotification получено уведомление.

applicationWillResignActive: вызывается в AppDelegate.

Открыть Safari (на этот раз мы переключаемся на другое приложение, а не возвращаемся к нашему приложению Перемещаемся вверх, чтобы открыть переключатель задач (на данный момент приложение больше не работает)

UIScene.didEnterBackgroundNotification был вызван в какой-то момент, когда приложение не было видно.

Открыть приложение

applicationDidBecomeActive: вызывается в AppDelegate.

person Victor Engel    schedule 16.05.2021
comment
ОС iPad, соответственно, 14.5.1. В более ранних версиях вызываются разные методы. - person Victor Engel; 16.05.2021