43 votes

Utilisation de méthodes background / foreground dans AppDelegate

J'ai l'intention de mettre en œuvre multi-tâche dans mon application. Je peux voir de nombreuses méthodes de là à le faire dans l' AppDelegate comme applicationWillResignActive, applicationDidEnterBackground, applicationWillEnterForeground, ...

Mais.... Je ne vois pas la façon dont ils doivent être utilisés, ni pourquoi ils ne sont pas dans le ViewControllers... Ni ce qu'ils sont ici pour.

Je veux dire : lorsque l'application d'entrer dans le fond, je ne sais pas sur quel point de vue de mon utilisateur. Et à l'arrière, lorsque l'application vient en premier plan, comment aurais-je sais ce que je fais et ce que je peut faire appel, pour mettre à jour la vue par exemple ?

J'aurais compris si ces méthodes dans chaque vue-contrôleur, mais ici, je ne vois pas comment ils peuvent être utilisés de façon concrète...

Pouvez-vous m'aider à comprendre la façon de mettre en œuvre des choses dans ces méthodes ?

132voto

Oliver Points 10593

Chaque objet de recevoir un UIApplicationDidEnterBackgroundNotification de notification lorsque l'application passe en arrière-plan. Afin d'exécuter du code lorsque l'application passe en arrière-plan, vous avez juste à écouter de la notification de l'endroit où vous voulez :

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(appHasGoneInBackground:)
                                             name:UIApplicationDidEnterBackgroundNotification
                                           object:nil];

N'oubliez pas de libérer l'écouteur lorsque vous n'avez pas besoin de l'écouter plus :

[[NSNotificationCenter defaultCenter] removeObserver:self];

Et le mieux dans le meilleur, vous pouvez jouer de la même façon avec les notifications suivantes :

  • UIApplicationDidEnterBackgroundNotification
  • UIApplicationWillEnterForegroundNotification
  • UIApplicationWillResignActiveNotification
  • UIApplicationDidBecomeActiveNotification

Amusez-vous ! :-)

Si cette réponse vous a aidé, je serais heureux de recevoir un upvote ;-)

8voto

Alan Zeino Points 3380

Ils ne se trouvent dans aucun de vos contrôleurs de vue, car iOS adopte un modèle de conception "délégué". Vous pouvez ainsi être assuré qu'une méthode se déclenchera sur une classe (dans ce cas, le délégué de l'application pour votre application) si nécessaire.

En tant que processus d'apprentissage, pourquoi ne pas simplement mettre NSLog dans ces méthodes pour voir quand ils sont licenciés?

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{    

    // Override point for customization after application launch.
    NSLog(@"didFinishLaunchingWithOptions");
    [self.window makeKeyAndVisible];

    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.
     */
    NSLog(@"applicationWillResignActive");
}


- (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, called instead of applicationWillTerminate: when the user quits.
     */
    NSLog(@"applicationDidEnterBackground");
}


- (void)applicationWillEnterForeground:(UIApplication *)application 
{
    /*
     Called as part of  transition from the background to the inactive state: here you can undo many of the changes made on entering the background.
     */
    NSLog(@"applicationWillEnterForeground");
}


- (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.
     */
    NSLog(@"applicationDidBecomeActive");
}


- (void)applicationWillTerminate:(UIApplication *)application 
{
    /*
     Called when the application is about to terminate.
     See also applicationDidEnterBackground:.
     */
    NSLog(@"applicationWillTerminate");
}
 

1voto

iRD Points 306

Vous pouvez trouver l'explication du cycle de vie de l'application sur le lien ci-dessous

Processus de premier plan / arrière-plan / actifs / inactifs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X