Какой правильный делегат следует реализовать, когда приложение выходит из фонового режима, и вы хотите, чтобы оно подготовило его к работе?
applicationWillEnterForeground vs applicationDidBecomeActive - Какая разница?
Какой правильный делегат для реализации, когда приложение собирается в спящий режим, и вы хотите подготовить его для очистки и сохранения данных?
applicationWillResignActive и applicationDidEnterBackground - в чем разница?
Кроме того, я заметил, что applicationWillResignActive вызывается, когда приходит входящее SMS или звонок, но пользователь выбирает нажать Ok и продолжить. Я не хочу, чтобы мое приложение предпринимало какие-либо действия в этих случаях. Я просто хочу, чтобы он продолжал работать без какой-либо промежуточной очистки, поскольку пользователь не выходил из приложения. Итак, я думаю, что имеет больше смысла выполнять очистку только в applicationDidEnterBackground.
Буду признателен за ваш вклад в лучшие практики, которые следует использовать при выборе делегатов для пробуждения и засыпания, а также при рассмотрении таких событий, как прерывание с помощью SMS / звонков.
Спасибо
-applicationWillEnterForeground:
не будет вызываться, только-applicationDidEnterBackground:
(предположим, iOS не считает, что это перезапуск).applicationWillEnterForeground:
не будет вызываться каждый раз от фона к переднему плану ?! Я не могу найти случай, когда он НЕ будет назван БЕЗapplicationDidBecomeActive
впоследствии.Управление жизненным циклом вашего приложения полезно для ваших вопросов. Для быстрого понимания, вы можете увидеть цифры в этом документе. Вы также можете прочитать комментарий из кода, сгенерированного мастером XCode. Перечислено следующим образом:
Для более подробных объяснений, пожалуйста, обратитесь к официальному документу для UIApplicationDelegate
источник
Я все еще был немного смущен ответом Дано, поэтому я провел небольшой тест, чтобы получить поток событий в определенных сценариях для моей справки, но он может быть полезен и вам. Это для приложений, которые НЕ используют
UIApplicationExitsOnSuspend
в своем info.plist. Это проводилось на симуляторе iOS 8 +, подтвержденном устройством iOS 7. Пожалуйста, извините имена обработчиков событий Xamarin. Они очень похожи.Да,
DidEnterBackground
вызывается дважды на устройстве iOS7. Оба раза UIApplication состояние является фоновым. Однако симулятор iOS 8 этого не делает. Это требует тестирования на устройстве iOS 8. Я обновлю свой ответ, когда получу руку, или кто-то еще может подтвердить.источник
applicationWillEnterForeground
называется:когда приложение перезапускается (происходит из фона на передний план) Этот метод не вызывается, когда приложение запускается в первый раз, т. е. когда
applicationDidFinishLaunch
вызывается, но только когда происходит из фонаapplicationDidBecomeActive
applicationDidBecomeActive
называетсякогда приложение запускается впервые
didFinishLaunching
после,applicationWillEnterForeground
если нет URL для обработки. послеapplication:handleOpenURL:
называется. после,applicationWillResignActive
если пользователь игнорирует прерывание как телефонный звонок или SMS. после исчезновения alertView в любом месте из приложенияисточник
applicationWillResignActive вызывается, когда система запрашивает разрешения. (в iOS 10). На всякий случай, если кто-то попал в ту же проблему, что и я ...
источник
В iOS 8+ есть небольшая, но важная разница для приема телефонных звонков.
В iOS 7, если пользователь принимает телефонный звонок, вызываются и applicationWillResignActive: и applicationDidEnterBackground:. Но в iOS 8+ называется только приложение WillResignActive:
источник
Для iOS 13+ будут выполнены следующие методы:
источник