2010-06-22 19 views
29

Antes de que iOS4.0 haga clic en el botón de inicio en iPhone sale de la aplicación, y Apple tenía en su guía que programáticamente salir de la aplicación no fue aceptado.Salir de la aplicación en iOS 4.0

ahora todo cambió en iOS4.0, al hacer clic en el botón de inicio pone su aplicación en modo suspendido (multitarea) ... y creo que debería haber una manera clara para que el usuario salga de la aplicación, como un botón de salida.

¿está ahora bien con la manzana? y como se puede hacer?

+2

Tenga en cuenta que al hacer clic en el botón de inicio solo se suspenden las aplicaciones compiladas con SDK 4.0. Aplicaciones compiladas con SDK anteriores (y aplicaciones 4.0 que [cancelan]] (http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/CoreApplication/CoreApplication.html#//apple_ref/doc/uid/TP40007072-CH3-SW24)) no suspender, terminan. – progrmr

+0

Aquí hay un buen artículo sobre los cambios que Apple hizo y dónde cambiar sus métodos: http://www.drobnik.com/touch/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/ – JoePasq

Respuesta

21

No, todavía no debería hacer esto.

Tiene controladores para las diferentes etapas, por lo que esta es la forma en que debe hacerlo. No tiene sentido salir de forma manual. Si reinicia la aplicación, lo ideal sería que comenzara donde la dejó, por lo que puede reanudar o iniciar y cargar el estado anterior.

No hay razón para salir.

Editar

Como esto sigue apareciendo de nuevo: iOS Human Interface Guidelines dice "no dejar de fumar mediante programación". Y hemos visto muchos informes de aplicaciones que tenían llamadas a exit() en ellos en el pasado.

Salir en lugar de suspender estableciendo la clave adecuada en el archivo Info.plist está perfectamente bien, por supuesto, pero no es un botón de IU dedicado, solo la implementación específica de la aplicación de salida de programa mediante el botón de inicio.

+2

Puedo No veo por qué no es aceptable colocar un botón de salida para el usuario. cada vez que hago doble clic en el botón de inicio, tengo una docena de aplicaciones suspendidas, y siguen creciendo, lo que realmente me molesta, y creo que todos los usuarios de iPhone sentirán lo mismo. – Tamer

+14

Estás pensando de la manera incorrecta. Esas aplicaciones no son sus aplicaciones suspendidas. Esas aplicaciones son solo las aplicaciones que el usuario usó recientemente. El hecho de que algunos de ellos se encuentren en diferentes etapas de congelación es irrelevante en el iPhone. –

+0

@tewha, estas son aplicaciones activas (desde el punto de vista del usuario), congeladas o suspendidas, pero no son aplicaciones utilizadas por el usuario por última vez. Sigo pensando que debería haber una forma de cerrar la aplicación, en lugar de apilarla en la lista de tareas. – Tamer

49

Puede establecer la clave Info.plist UIApplicationExitsOnSuspend para asegurarse de que la aplicación finaliza por completo.

+7

+1 Sí, puede optar por no participar en la ejecución en segundo plano y que su aplicación finalice en lugar de suspender, [lea los documentos aquí] (http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/CoreApplication /CoreApplication.html#//apple_ref/doc/uid/TP40007072-CH3-SW24) – progrmr

+1

La respuesta "correcta" en este hilo no responde a la pregunta, forma bastante mala. (Aunque tiene mérito) En mi caso, tengo una aplicación con información confidencial y preferiría "cerrar sesión" cada vez y la manera más fácil de hacerlo es abandonarlo. – Marius

+1

+1 Acepto que esta es la respuesta correcta a la pregunta de OP. –

3

Tuve un problema real con esto. Hay un gran punto para salir de forma manual o prgramática.

Con el iPhone OS anterior, mi aplicación estaba escribiendo su estado (primer uso o segunda vez en adelante, etc.) en un plist cuando terminó. Cuando el usuario regresó, quería mostrar cosas diferentes leyendo el plist. Además, quería mostrar la primera pantalla cada vez que el usuario regresaba después de salir.

Con la aplicación suspendida en segundo plano con iPhone OS4, la aplicación vuelve a donde se quedó (es decir, muestra la misma pantalla donde estaba el usuario) y nunca cambia el estado de la misma porque applicationWillTerminate ahora nunca se llama.

Porque este es el comportamiento deseado la mayor parte del tiempo (para poder continuar cuando salga de la aplicación temporalmente), tiene que haber una manera de poder elegir, es decir, suspenderlo o salir.

Dado que configurar UIApplicationExitsOnSuspend = YES da solo una forma (es decir, siempre termina cuando se presiona HOME), esta no es una solución que estoy buscando.

Quiero que la aplicación sepa una vez que se complete toda la cadena de pasos, en contra de que solo se haya suspendido la secuencia, y que se cierre en el momento correcto.

Para hacer esto, tengo que ser capaz de terminar la aplicación y escribir el estado una vez que el uso haya completado toda la secuencia. Otras veces, solo quiero que se suspenda la aplicación.

Si toca el botón INICIO dos veces, puede ver las aplicaciones suspendidas. Puedo eliminar (cerrar) mi aplicación al tocarla durante más tiempo y tocar el símbolo (-) que aparece, pero esto no es tan intuitivo para los usuarios y demasiados pasos.

Otra opción es tener un botón Salir como una de las pestañas de navegación en mi aplicación, pero eso es feo. Por ahora, mi única opción parece ser optar por configurar UIApplicationExitsOnSuspend = YES.

6

Véase también iOS Debugging Magic (Technical Note TN2239):

tener en cuenta que el ciclo de vida de aplicaciones iOS está bajo el control del usuario, lo que significa que las aplicaciones de iOS no sólo debe dejar de fumar. Su compilación de lanzamiento solo debe llamar a abortar en circunstancias en las que se hubiera bloqueado de todos modos, y la llamada de aborto evita dañar los datos del usuario o le permite diagnosticar el problema más fácilmente.

Si bien con respecto al tema de determinar la causa de la salida prematura, Understanding and Analyzing iPhone OS Application Crash Reports (Technical Note TN2151) podría ser de su interés.

Lo siento por salir un poco del tema, pero se relaciona con las salidas tempranas y el diagnóstico.

Jeff

-4

Se puede poner una aplicación mediante programación en el fondo con este comando privado:

(pero que su aplicación va a ser rechazado si lo usa)

[[UIApplication sharedApplication] suspend]; 
+0

apis privadas no se pueden utilizar en producción! – ninjr

3

Usted puede utilizar siempre exit(1) . Esta es una salida raw/forzada con un entero para un código/razón. Puede usar esto durante el desarrollo, como en el modo de simulación cuando solo desea terminar; como en AHORA.

8

Hay un motivo invocado programáticamente exit().

Supongamos que tiene una aplicación de voip que siempre se inicia al arrancar y se reinicia cuando el sistema la mata, p. cuando ocurre una advertencia de memoria. Normalmente es el comportamiento preferido porque necesita ejecutar en segundo plano para mantener sus sockets TCP voip.

Sin embargo, si la aplicación admite varios modos de funcionamiento, como a) ejecutar en segundo plano utilizando TCP yb) no ejecutar en segundo plano sino iniciar solo después de aceptar la notificación PUSH, si el usuario utiliza la aplicación en b) modo no le gusta que la aplicación esté consumiendo memoria que se puede utilizar para otras aplicaciones.

Así que sería bueno si la aplicación pudiese verificar desde el principio si se inició en segundo plano y el usuario desea que la aplicación se ejecute en modo b) y correctamente exit(0), por lo que ya no se reiniciará automáticamente.

3

Éstos son los pasos para @Joost Schuur; s respuesta:

  1. Abra su información.plist archivo

  2. agregar la clave UIApplicationExitsOnSuspend o Seleccionar aplicación no no se ejecute en segundo plano

  3. establecer la nueva clave para SÍ o rellenar la casilla de verificación

puntos de interrupción en applicationWillResignActive y applicationWillTerminate mostrará que funciona.

0

Se supone que no debes hacer esto. Cuando el usuario quiera abandonar su aplicación, presionará el botón INICIO.

Cuando el usuario presiona el botón de inicio, obtiene una notificación UIApplicationWillResignActiveNotification. Usa esa notificación para derribar todos tus recursos.

Básicamente su aplicación debe "esconderse en una esquina" (consuma la menor cantidad de memoria posible) cuando el usuario presiona el botón de inicio. Sin embargo, hay una compensación ya que cuanto más se derriba, más tiempo tarda la aplicación en volver a mostrarse cuando el usuario vuelve a conectarse (necesita volver a cargar todos sus recursos).

Cuestiones relacionadas