Los documentos para desarrolladores iOS 4 de Apple describen todo esto muy claramente.
Cuando su aplicación se cierra o se apaga, se suspende casi de inmediato, lo que significa que el sistema operativo congela el estado de la aplicación. Cuando el usuario vuelve a su aplicación, su código se ejecuta justo donde se mantuvo. Usted no necesita para agregar cualquier código a su aplicación para hacer esto, simplemente compílelo contra OS 4.
Lo anterior es cierto en la mayoría de los casos. Hay dos razones por las cuales el modelo "suspendido" puede no aplicarse:
1) Si el dispositivo comienza a quedarse sin memoria, el sistema operativo comenzará a cancelar las aplicaciones suspendidas que no han sido conmutadas por un tiempo, sin previo aviso. Esta es la razón por la que le conviene a su aplicación recordar también su estado, por lo que si su aplicación finaliza y se vuelve a abrir, el usuario realmente no se da cuenta porque todavía regresa al lugar donde lo dejó.
2) Su aplicación utiliza una de las API de "fondo". Estos son para reproducción de audio, servicios de VoIP o servicios de ubicación.En este caso, su aplicación puede continuar ejecutándose en segundo plano, pero solo tiene acceso a esas API. Además, su aplicación puede designar ciertas tareas de larga ejecución como "tareas en segundo plano" que deben completarse antes de suspender o finalizar la aplicación, como cargar imágenes en Flickr o renderizar un video, etc.
La "tarea de fondo" El método no cubre los servidores de ping indefinidamente, ya que hay un límite de tiempo para la tarea, después de lo cual se interrumpirá por la fuerza. Se espera que las aplicaciones que necesitan ese tipo de funcionalidad implementen notificaciones push, al igual que antes.
Eso debería aclarar esto. En general, creo que es una solución bastante elegante para la multitarea en un dispositivo móvil.
Tengo 0 experiencia en iOS, por lo que puede no ser útil. Sin embargo, ¿por qué no hace que haga algo mientras se ejecuta en segundo plano para ver si realmente se está ejecutando (por ejemplo, actualizar un contador cada segundo)? – Cam
¡Buena idea! Voy a intentarlo ahora ... –
Acabo de configurar un temporizador para disparar cada segundo y hacer ping a mi servidor web. Efectivamente, el temporizador dejó de disparar cuando la aplicación quedó en segundo plano, aunque cuando regresó regresó al estado en que estaba cuando se suspendió. –