2012-05-07 11 views
7

En mi aplicación cuando el usuario pulsa el botón de inicio, guardo los datos en NSUserDefaults. La aplicación se ejecuta en segundo plano. Cuando el usuario vuelve a iniciar la aplicación, uso el método applicationWillEnterForeground para mostrar los datos guardados.Diferenciar entre applicationDidEnterBackground y applicationWillTermimate

Sin embargo, cuando el usuario toca dos veces en el botón de inicio y sale de la aplicación seleccionando el signo menos en la aplicación, necesito guardar diferentes datos en los mismos valores predeterminados del usuario. Pero cuando salgo de la aplicación, a veces se llama applicationWillTerminate y otras veces no.

Entonces, ¿cómo puedo diferenciar que la aplicación se ha minimizado o que se ha abandonado?

+0

Puede usar applicationDidEnterBackground, una vez que se presiona el botón de inicio, este método siempre se invoca. – rishi

+0

@rishi Parece que la verdadera pregunta en la publicación es por qué 'applicationWillTerminate' a veces no se llama cuando se termina la aplicación ... – Hailei

+0

Sí, pero ¿cómo puedo saber si la aplicación se ha minimizado o si se ha abandonado? Quiero que se guarden datos diferentes para estas dos condiciones diferentes. –

Respuesta

7

Cada vez que el usuario toca solamente y aplicación de una sola vez irá en segundo plano en ese momento applicationDidEnterBackground siempre llama. En este método, puede actualizar/almacenar temporalmente su valor de NSUserDefaults.

Si en el caso, aplicación de nuevo vendrá en primer plano con terminación a cabo mediante el uso de dobles grifos, applicationDidBecomeActive llamará, en el que puede volver a actualizar/eliminar NSUserDefaults valor almacenado temporalmente. Y si el usuario cierra la aplicación con dos toques, el valor almacenado se mantendrá con NSUserDefaults.

0

aplicaciones que soportan ejecución en segundo plano, este método es generalmente no llama cuando el usuario sale de la aplicación porque la aplicación simplemente se mueve a un segundo plano en ese caso

Si hay datos que necesita para salvar lo que debería hacerlo cuando la aplicación quede en segundo plano.

0

applicationWillTerminate se invoca solo cuando el proceso de las aplicaciones se cancela. Es decir, el usuario lo elimina usando el botón rojo de menos cerrar en el selector de tareas, o el propio sistema lo elimina mientras está en segundo plano (por ejemplo, en condiciones de poca memoria).

Para sus necesidades, se prefiere applicationDidEnterBackground; se llama cuando el usuario minimiza la aplicación presionando el botón de Inicio o cambiando a otra aplicación.

5

Acerca de la diferencia entre los métodos UIApplicationDelegate, consulte UIApplicationDelegate Protocol Reference. applicationDidEnterBackground: siempre se llamará cuando se presiona el botón de inicio. Pero parece que no se garantiza que se llame al applicationWillTerminate:.

Si su aplicación no se está ejecutando en primer plano, puede estar en modo de fondo o en modo suspendido. Consulte la sección "El ciclo de inicio de la aplicación" en iOS App Programming Guide - App States and Multitasking.

Cuando la aplicación se ejecuta en segundo plano y supervisa eventos, se llamará al applicationWillTerminate: cuando finalice. Cuando la aplicación se suspende, no lo hará. Véase la descripción en la sección "Aplicación de Terminación":

Incluso si usted desarrolla su aplicación usando el SDK de iOS 4 y posteriores, todavía se debe estar preparado para su aplicación a morir sin ninguna notificación. El usuario puede eliminar aplicaciones explícitamente mediante la interfaz de usuario multitarea. Además, si la memoria se vuelve limitada, el sistema podría eliminar aplicaciones de la memoria para generar más espacio. Las aplicaciones suspendidas no se notifican de la finalización, pero si su aplicación se está ejecutando actualmente en segundo plano (y no está suspendida), el sistema llama al método applicationWillTerminate: del delegado de su aplicación. Su aplicación no puede solicitar tiempo de ejecución de fondo adicional desde este método.

1

applicationDidEnterBackground - Cada vez que el usuario pulsa el botón casa y aplicación irán en segundo plano en ese momento llamada al método applicationDidEnterBackground. Se llama cuando el usuario minimiza la aplicación al presionar el botón de Inicio o al cambiar a otra aplicación.

aplicaciónWillTerminate - Se invoca solo cuando el proceso de las aplicaciones se cancela. Es decir, el usuario lo elimina usando el botón rojo de menos cerrar en el selector de tareas, o el propio sistema lo elimina mientras está en segundo plano (por ejemplo, en condiciones de poca memoria). Su aplicación no puede solicitar tiempo de ejecución de fondo adicional desde este método.

1

applicationDidEnterBackground: se llamará a este método cuando el usuario configure la aplicación en segundo plano presionando el botón de inicio.

applicationWillTerminate - Se llamará a este método cuando el usuario cierre la aplicación que está en el modo de fondo presionando el botón rojo menos.

Cuestiones relacionadas