Quel est le délégué approprié à implémenter lorsqu'une application se réveille en arrière-plan et que vous souhaitez la préparer pour qu'elle soit active?
applicationWillEnterForeground vs applicationDidBecomeActive - Quelle est la différence?
Quel est le délégué approprié à implémenter lorsqu'une application se met en veille et que vous souhaitez la préparer au nettoyage et à la sauvegarde des données?
applicationWillResignActive vs applicationDidEnterBackground - Quelle est la différence?
De plus, j'ai remarqué que applicationWillResignActive est appelé lorsqu'un appel entrant SMS arrive mais que l'utilisateur choisit de cliquer Ok et de continuer. Je ne le fais pas.) veux que mon application prenne des mesures dans ces cas-là. Je veux juste qu'elle continue à fonctionner sans nettoyage intermédiaire puisque l'utilisateur n'a pas quitté l'application. Je pense donc qu'il est plus logique de faire un travail de nettoyage uniquement dans applicationDidEnterBackground.
Je vous serais reconnaissant de votre contribution sur les meilleures pratiques à suivre pour choisir les délégués à mettre en place pour se réveiller et s’endormir, ainsi que pour prendre en compte des événements tels que les interruptions par SMS/appels.
Merci
Au réveil, c’est-à-dire relancer une application (via tremplin, changement d’application ou URL) applicationWillEnterForeground:
est appelé. Il n'est exécuté qu'une fois lorsque l'application est prête à être utilisée, après avoir été mise à l'arrière-plan, tandis que applicationDidBecomeActive:
peut être appelé plusieurs fois après le lancement. Cela fait applicationWillEnterForeground:
idéal pour une configuration qui ne doit avoir lieu qu'une fois après le redémarrage.
applicationWillEnterForeground:
s'appelle:
applicationDidBecomeActive:
applicationDidBecomeActive:
s'appelle:
application:didFinishLaunchingWithOptions:
applicationWillEnterForeground:
s’il n’ya pas d’URL à gérer.application:handleOpenURL:
est appelé.applicationWillResignActive:
si l’utilisateur ignore les interruptions, comme un appel téléphonique ou un SMS.applicationWillResignActive:
s'appelle:
applicationDidEnterBackground:
est appelé.applicationDidBecomeActive:
est appelé.applicationDidEnterBackground:
s'appelle:
applicationWillResignActive:
beginBackgroundTaskWithExpirationHandler:
Ceci Apple Document est utile pour répondre à vos questions. Pour un concept rapide, vous pouvez voir la figure 2-3 dans ce document. Vous pouvez également lire le commentaire à partir du code généré. par l'Assistant XCode.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application
{
/*
Sent when the application is about to move from active to inactive state.
This can occur for certain types of temporary interruptions (such as an
incoming phone call or SMS message) or when the user quits the application
and it begins the transition to the background state.
Use this method to pause ongoing tasks, disable timers, and throttle down
OpenGL ES frame rates. Games should use this method to pause the game.
*/
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
/*
Use this method to release shared resources, save user data, invalidate
timers, and store enough application state information to restore your
application to its current state in case it is terminated later.
If your application supports background execution, this method is called
instead of applicationWillTerminate: when the user quits.
*/
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
/*
Called as part of the transition from the background to the active state;
here you can undo many of the changes made on entering the background.
*/
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
/*
Restart any tasks that were paused (or not yet started) while the
application was inactive. If the application was previously in the
background, optionally refresh the user interface.
*/
}
- (void)applicationWillTerminate:(UIApplication *)application
{
/*
Called when the application is about to terminate.
Save data if appropriate.
See also applicationDidEnterBackground:.
*/
}
Dans le code ci-dessus, seule l'application qui lance avez-vous la possibilité de dire OUI ou NON, les autres ne sont que des notifications. En d'autres termes, vous n'avez aucun moyen de forcer les utilisateurs à négliger l'appel entrant ou SMS) à l'aide de la liste de codes ci-dessus. Je ne sais pas s'il existe une autre solution de contournement.
J'étais toujours un peu confus avec la réponse de Dano, alors j'ai fait un petit test pour obtenir le déroulement des événements dans certains scénarios pour référence, mais cela pourrait vous être utile également. Ceci est pour les applications qui n'utilisent pas UIApplicationExitsOnSuspend
dans leur info.plist. Cela a été réalisé 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.
TerminéLancement
OnActivated
OnResignActivation
OnActivated
OnResignActivation
DidEnterBackground
WillEnterForeground
OnActivated
OnResignActivation
DidEnterBackground
DidEnterBackground (iOS 7 uniquement?)
Oui, DidEnterBackground
est appelé deux fois sur un périphérique iOS7. Les deux fois, l'état UIApplication est Background. Cependant, le simulateur iOS 8 ne le fait pas. Cela nécessite des tests sur iOS 8. Je mettrai à jour ma réponse lorsque j'aurai ma main dessus ou que quelqu'un d'autre pourra confirmer.
applicationWillEnterForeground
s'appelle:
lorsque l'application est relancée (passe de l'arrière-plan à l'avant-plan) Cette méthode n'est pas appelée lorsque l'application démarre pour la première fois, c'est-à-dire lorsque applicationDidFinishLaunch
est appelé mais uniquement lorsqu'il provient de l'arrière-plan applicationDidBecomeActive
applicationDidBecomeActive
s'appelle
quand app est lancé pour la première fois après didFinishLaunching
après applicationWillEnterForeground
s’il n’ya pas d’URL à gérer. après application:handleOpenURL:
est appelé. after applicationWillResignActive
si l'utilisateur ignore les interruptions, comme un appel téléphonique ou un SMS. après la disparition de alertView n'importe où de l'application
applicationWillResignActive est appelée lorsque le système demande des autorisations. (sous iOS 10). Juste au cas où quelqu'un aurait le même problème que moi ...
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, applicationWillResignActive: et applicationDidEnterBackground: sont appelées. Mais dans iOS 8+, seule applicationWillResignActive: est appelée.