ios4 background-foreground

ios4 - iphone 4 sdk: detecta el retorno desde el modo de fondo



background-foreground (2)

¿Cómo puedo detectar que una aplicación acaba de regresar del "modo en segundo plano"? Quiero decir, no quiero que mi aplicación obtenga datos (cada 60 segundos) cuando el usuario presiona el "botón de inicio". Pero me gustaría hacer una actualización "especial" la primera vez que la aplicación está en modo de primer plano.

¿Cómo puedo detectar estos dos eventos?

  1. aplicación yendo al modo de fondo
  2. la aplicación va al modo de primer plano

Gracias por adelantado.

François


A continuación, se explica cómo escuchar estos eventos:

// Register for notification when the app shuts down [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillTerminateNotification object:nil]; // On iOS 4.0+ only, listen for background notification if(&UIApplicationDidEnterBackgroundNotification != nil) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationDidEnterBackgroundNotification object:nil]; } // On iOS 4.0+ only, listen for foreground notification if(&UIApplicationWillEnterForegroundNotification != nil) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillEnterForegroundNotification object:nil]; }

Nota: las comprobaciones if(&SomeSymbol) aseguran que su código funcione en iOS 4.0+ y también en iOS 3.x - si compila con un iOS 4.x o 5.x SDK y establece el destino de implementación en iOS 3.x. su aplicación aún se puede ejecutar en dispositivos 3.x, pero la dirección de los símbolos relevantes será nula y, por lo tanto, no intentará solicitar notificaciones que no existan en los dispositivos 3.x (lo que bloquearía la aplicación).

Actualización: en este caso, las comprobaciones if(&Symbol) ahora son redundantes (a menos que realmente necesite soportar iOS 3 por algún motivo). Sin embargo, es útil conocer esta técnica para verificar si existe una API antes de usarla. Prefiero esta técnica que probar la versión del sistema operativo porque está comprobando si la API específica está presente en lugar de utilizar el conocimiento externo de qué API están presentes en qué versiones del sistema operativo.


Si implementa un UIApplicationDelegate, también puede conectar funciones como parte del delegado:

- (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(@"Application moving to background"); } - (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. */ NSLog(@"Application going active"); }

Para la referencia del protocolo, consulte http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html