Видео: Микрофон в AirPods для съемки видео. Как его включить? 2024
На устройстве iOS различные события, кроме терминации, могут прерывать ваше приложение, чтобы позволить пользователю отвечать, а ваше приложение переходит в неактивное состояние . Если пользователь предпочитает игнорировать прерывание, ваше приложение возвращается в активное состояние и продолжает работать как раньше. Если пользователь решает нажать предупреждение, ваше приложение затем переходит в состояние фона , , где оно приостановлено, но остается в памяти.
iOS отправляет вам несколько сообщений, чтобы вы точно знали, что происходит, а также дайте вам возможность предпринять такие действия, как сохранение пользовательских данных и информации о состоянии, , которая означает сохранение точки, в которой находился пользователь в приложении. Поскольку приложение находится в фоновом режиме и все еще в памяти, перезапуск почти мгновенен.
Объекты приложения остаются в памяти, поэтому их не нужно создавать заново, когда приложение перезагружается. Если память будет ограничена, iOS может очистить фоновые приложения, чтобы сделать больше места для приложения переднего плана.
Поскольку эти прерывания вызывают временную потерю контроля со стороны вашего приложения, события касания больше не отправляются в ваше приложение.
Последовательность событий всегда начинается одинаково - с сообщением applicationWillResignActive:, отправленным в делегат вашего приложения, когда приложение собирается перейти из активного состояния в неактивное. В этом методе вы должны приостановить выполнение текущих задач, отключить таймеры, снизить частоту кадров OpenGL ES и вообще приостановить работу.
Что происходит после этого зависит от а) характера прерывания и б) того, как пользователь реагирует на прерывание. Ваше приложение может быть перемещено на задний план или активировано.
Если пользователь реагирует на прерывание или запустил другое приложение, ваше приложение перемещается в фоновый режим.
Следующие две пули объясняют сообщения, на которые может реагировать ваше приложение после того, как они были перемещены в фоновом режиме:
-
Сообщение applicationDidEnterBackground: : Когда ваше приложение впервые входит в фоновое состояние, оно отправил сообщение applicationDidEnterBackground:. В этом методе вы должны сохранить любые несохраненные данные или состояние (текущее представление, выбранные параметры и т. Д.) Во временный файл кеша или базу данных предпочтений на диске.
Несмотря на то, что ваше приложение входит в фоновое состояние, у вас нет гарантии, что он останется там на неопределенный срок. Если память будет ограничена, iOS очистит фоновые приложения, чтобы сделать больше места для приложения переднего плана.Вам необходимо сделать все необходимое для восстановления вашего приложения, если оно впоследствии будет удалено из памяти.
Если ваше приложение очищается, когда оно находится в этом приостановленном состоянии, он не получает уведомления о его удалении из памяти. Вот почему вам нужно сохранять любые данные, когда вы получаете сообщение applicationDidEnterBackground:.
Когда ваш делегат отправлен метод applicationDidEnterBackground: у вашего приложения есть недокументированное количество времени, чтобы закончить работу. Если метод applicationDidEnterBackground: не возвращается до истечения времени (или если ваше приложение не запрашивает больше времени выполнения от iOS), ваше приложение будет завершено и очищено из памяти.
Если ваше приложение запрашивает больше времени выполнения или объявило, что оно выполняет фоновое выполнение, ему разрешено продолжить работу после возвращения метода applicationDidEnterBackground:. Если нет, ваше (сейчас) фоновое приложение будет перенесено в состояние приостановлено вскоре после возврата из метода applicationDidEnterBackground:.
Если приложение находится в фоновом режиме, оно может быть перезапущено. Это может произойти, если пользователь выбирает приложение с главного экрана или панели многозадачности или запускается системой, если приложение обрабатывает события в фоновом режиме или контролирует значительное изменение местоположения, например.
-
applicationWillEnterForeground: сообщение: Когда ваше приложение перезаписывается из фона, оно отправляется приложению applicationWillEnterForeground:. В этом методе вам нужно отменить то, что вы сделали в методе applicationDidEnterBackground:.
Если пользователь игнорирует SMS-сообщение или приложение перезаписывается из фона, ваше приложение снова активируется и начинает получать прикосновение и другие события.
Когда ваше приложение будет повторно активировано, оно отправит сообщение applicationDidBecomeActive:.
Вы можете использовать метод applicationDidBecomeActive: для восстановления приложения до состояния, в котором он находился, до прерывания. Здесь вы отмените то, что вы сделали в методе applicationWillResignActive, например, перезапустите все задачи, которые были приостановлены (или еще не запущены), в то время как приложение было неактивным. Если приложение было ранее в фоновом режиме, вам может потребоваться обновить пользовательский интерфейс.
Пока приложение находится в состоянии приостановлено, система отслеживает и сглаживает (на самом деле netsout) события, которые могут повлиять на это приложение, когда он перезагружается. Как только ваше приложение снова запущено и работает, система передает эти события в него. Для большинства этих событий существующая инфраструктура вашего приложения должна отвечать только соответствующим образом.
Приложения, как правило, перемещаются на задний план при прерывании. Но если приложение было скомпилировано с очень ранней версией SDK или работает на ранней версии операционной системы, которая не поддерживает многозадачность - или если вы решите, что не хотите, чтобы ваше приложение запускалось в фоновом режиме и вы устанавливаете ключ UIApplicationExitsOnSuspend в своей Info. plist file - iOS завершает ваше приложение.
Даже если ваше приложение поддерживает многозадачность, вы все равно должны быть готовы к тому, чтобы ваше приложение было убито без какого-либо уведомления.Пользователь может явно убивать приложения, используя панель многозадачности. Кроме того, если память будет ограничена, система может удалить приложения из памяти, чтобы сделать больше места. Если оно удалит ваше приложение , оно не даст вам предупреждения !
Когда делегат приложения отправляется сообщение applicationWillTerminate: в приложениях без многозадачности или те, которые работают в фоновом режиме, вам нужно делать то же самое, что и вы, в applicationDidEnterBackground:, за исключением того, что на этот раз вы их знаете, что ваше приложение выиграло Не возвращайся с фона.
Ваше приложениеWillTerminate: реализация метода имеет ограниченное количество времени, чтобы выполнить то, что ему нужно сделать и вернуть. Дольше этого и ваше приложение прекращается и очищается из памяти.