Quel est le délégué approprié à implémenter lorsqu'une application sort de l'arrière-plan et que vous souhaitez qu'elle soit préparée pour être active?
applicationWillEnterForeground vs applicationDidBecomeActive - Quelle est la différence?
Quel est le délégué approprié à implémenter lorsqu'une application va se mettre en veille et que vous souhaitez la préparer au nettoyage et à l'enregistrement des données?
applicationWillResignActive vs. applicationDidEnterBackground - Quelle est la différence?
De plus, j'ai remarqué que applicationWillResignActive est appelé lorsqu'un SMS ou un appel entrant arrive, mais l'utilisateur choisit de cliquer sur OK et de continuer. Je ne souhaite pas que mon application prenne des mesures dans ces cas. Je veux juste qu'il continue à fonctionner sans aucun nettoyage intermédiaire car l'utilisateur n'a pas quitté l'application. Donc, je pense qu'il est plus logique de faire un travail de nettoyage uniquement dans applicationDidEnterBackground.
J'apprécierais votre contribution sur les meilleures pratiques à suivre pour choisir les délégués à mettre en œuvre pour se réveiller et s'endormir, ainsi que pour prendre en compte des événements comme être interrompu par SMS / appels.
Merci
-applicationWillEnterForeground:
ne sera pas appelé uniquement-applicationDidEnterBackground:
(supposons, iOS ne pense pas que c'est une relance).applicationWillEnterForeground:
sera appelé à chaque fois de l'arrière-plan au premier plan?! Je ne trouve pas de cas qui ne soit PAS appelé SANSapplicationDidBecomeActive
par la suite.La gestion du cycle de vie de votre application est utile pour vos questions. Pour un concept rapide, vous pouvez voir les figures dans ce document. Vous pouvez également lire le commentaire à partir du code généré par l'assistant XCode. Listé comme suit:
Pour des explications plus détaillées, veuillez vous référer au document officiel pour UIApplicationDelegate
la source
J'étais encore un peu confus avec la réponse de Dano, j'ai donc fait un petit test pour obtenir le flux des événements dans certains scénarios pour ma référence, mais cela pourrait aussi vous être utile. C'est pour les applications qui n'utilisent PAS
UIApplicationExitsOnSuspend
dans leur info.plist. Cela a été effectué sur un simulateur iOS 8 + confirmé avec un appareil iOS 7. Veuillez excuser les noms des gestionnaires d'événements de Xamarin. Ils sont très similaires.Oui,
DidEnterBackground
est appelé deux fois sur l'appareil iOS7. Les deux fois, l'état UIApplication est Arrière-plan. Cependant, le simulateur iOS 8 ne le fait pas. Cela nécessite des tests sur l'appareil iOS 8. Je mettrai à jour ma réponse lorsque j'y mettrai la main, ou quelqu'un d'autre pourrait confirmer.la source
applicationWillEnterForeground
est appelé:lorsque l'application est relancée (vient de l'arrière-plan au premier plan) Cette méthode n'est pas invoquée lorsque l'application démarre pour la première fois, c'est-à-dire lorsque
applicationDidFinishLaunch
est appelé , mais seulement quand vient de fondapplicationDidBecomeActive
applicationDidBecomeActive
est appelélorsque l'application est lancée pour la première fois après
didFinishLaunching
aprèsapplicationWillEnterForeground
s'il n'y a pas d'URL à gérer. aprèsapplication:handleOpenURL:
est appelé. aprèsapplicationWillResignActive
si l'utilisateur ignore l'interruption comme un appel téléphonique ou un SMS. après la disparition de alertView n'importe où dans l'applicationla source
applicationWillResignActive est appelée lorsque le système demande des autorisations. (dans iOS 10). Juste au cas où quelqu'un rencontrerait le même problème que moi ...
la source
Dans iOS 8+, il existe une différence subtile mais importante pour prendre un appel téléphonique.
Dans iOS 7, si l'utilisateur prend un appel téléphonique, les deux applicationWillResignActive: et applicationDidEnterBackground: sont appelées. Mais dans iOS 8+, seule l'applicationWillResignActive: est appelée.
la source
Pour iOS 13+, les méthodes suivantes seront exécutées:
la source