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

#ios #swift #viewcontroller #appdelegate #ipados

Вопрос:

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

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

Комментарии:

1. Не SceneDelegate запускается sceneWillResignActive(_:) ли функция при вызове переключателя задач? developer.apple.com/documentation/uikit/uiscenedelegate/…

2. В приложении нет функции выбора сцены. Тем не менее, я могу наблюдать уведомления о делегировании сцен. Я опубликую свои результаты в ответе.

3. Мне нужно было различать UIScene.didEnterBackgroundNotification , где мне нужно все приостановить, и UIScene.willDeactivateNotification где я могу продолжать работу приложения (например, когда оно отображается в переключателе задач).

Ответ №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.

Комментарии:

1. Операционная система iPad, соответственно, 14.5.1. В более ранних версиях вызывались различные методы.