Introducción al procesamiento en segundo plano en iOS
iOS regula el procesamiento en segundo plano muy estrictamente y ofrece tres enfoques para implementarlo:
- Registrar una tarea en segundo plano: si una aplicación necesita completar una tarea importante, puede pedir a iOS que no interrumpa la tarea cuando la aplicación se mueva en segundo plano. Por ejemplo, es posible que una aplicación tenga que terminar de iniciar la sesión de un usuario o terminar de descargar un archivo grande.
- Registrar como aplicación necesaria en segundo plano: una aplicación puede registrarse como un tipo específico de aplicación que tenga requisitos de segundo plano específicos, como Audio , VoIP , Accesorio externo, Quiosco y Ubicación. Estas aplicaciones tienen privilegios de procesamiento en segundo plano continuos siempre que realicen tareas que se encuentren dentro de los parámetros del tipo de aplicación registrado.
- Habilitar actualizaciones en segundo plano: las aplicaciones pueden desencadenar actualizaciones en segundo plano con la supervisión de regiones o escuchando para cambios significativos en la ubicación. A partir de iOS 7, las aplicaciones también pueden registrarse para actualizar el contenido en segundo plano mediante Captura en segundo plano o Notificaciones remotas.
Estados de aplicación y métodos delegados de aplicación
Antes de profundizar en el código para el procesamiento en segundo plano en iOS, es necesario comprender cómo afecta el procesamiento en segundo plano al ciclo de vida de una aplicación de iOS.
El ciclo de vida de la aplicación de iOS es una colección de estados y métodos de aplicación para moverse entre ellos. Una aplicación realiza la transición entre estados en función del comportamiento del usuario y de los requisitos de segundo plano de la aplicación. El movimiento se muestra en el diagrama siguiente:
- No en ejecución: la aplicación aún no se ha iniciado en el dispositivo.
- En ejecución o activa: la aplicación está en la pantalla y está ejecutando código en primer plano.
- Inactiva: la aplicación se interrumpe con una llamada telefónica entrante, texto u otra interrupción.
- En segundo plano: la aplicación se mueve al segundo plano y continúa ejecutando código en segundo plano.
- Suspendida: si la aplicación no tiene ningún código para ejecutarse en segundo plano o si se ha completado todo el código, el sistema operativo suspenderá la aplicación. El proceso de una aplicación suspendida se mantiene activo, pero la aplicación no puede ejecutar ningún código en este estado.
- Volver a No en ejecución/Finalización (Raro): ocasionalmente, el proceso de la aplicación se destruye y la aplicación vuelve al estado No en ejecución. Esto sucede en situaciones de poca memoria o si el usuario finaliza manualmente la aplicación.
Desde la introducción de la compatibilidad con varias tareas, iOS rara vez finaliza las aplicaciones inactivas y, en su lugar, mantiene sus procesos Suspendidos en memoria. Mantener activo el proceso de una aplicación garantiza que la aplicación se inicie rápidamente la próxima vez que el usuario la abra. También significa que las aplicaciones se pueden mover libremente del estado Suspendido al estado En segundo plano sin tomar recursos del sistema. iOS 7 aprovecha esta característica con nuevas API que permiten a las aplicaciones pausar tareas en segundo plano cuando el dispositivo entra en suspensión, actualizar el contenido directamente desde el segundo plano sin interacción del usuario, etc. Trataremos las nuevas API en técnicas de segundo plano de iOS.
Métodos de ciclo de vida de la aplicación
Cuando una aplicación cambia de estado, iOS notifica a la aplicación mediante métodos de evento en la clase AppDelegate
:
OnActivated
: se llama la primera vez que se inicia la aplicación y cada vez que la aplicación vuelve al primer plano. Este es el lugar para colocar código que necesita ejecutarse cada vez que se abre la aplicación.OnResignActivation
: si el usuario recibe una interrupción como un texto o una llamada telefónica, se llama a este método y la aplicación se inactiva temporalmente. Si el usuario acepta la llamada telefónica, la aplicación se enviará al segundo plano.DidEnterBackground
: se llama cuando la aplicación entra en estado en segundo plano, este método proporciona a una aplicación unos cinco segundos para prepararse para la posible finalización. Use esta vez para ahorrar datos y tareas de usuario y quitar información confidencial de la pantalla.WillEnterForeground
: cuando un usuario vuelve a una aplicación en segundo plano o suspendida y la inicia en primer plano, se llama aWillEnterForeground
. Este es el momento de preparar la aplicación para que tome el primer plano mediante la rehidratación de cualquier estado guardado duranteDidEnterBackground
. Se llamará inmediatamente aOnActivated
después de que se complete este método.WillTerminate
: la aplicación se cierra y su proceso se destruye. Este método solo se llama si la multitarea no está disponible en el dispositivo o en la versión del sistema operativo, si la memoria es baja o si el usuario finaliza manualmente una aplicación en segundo plano. Tenga en cuenta que las aplicaciones suspendidas que finalizan no llamarán aWillTerminate
.
En el diagrama siguiente se muestra cómo funcionan los estados de la aplicación y los métodos de ciclo de vida:
Controles de usuario para el segundo plano en iOS
iOS 7 introdujo varias características para proporcionar a los usuarios más control sobre el estado en segundo plano de una aplicación. Tanto el modificador de aplicaciones como la configuración de Actualización de la aplicación en segundo plano afectan al ciclo de vida de la aplicación.
Conmutador de aplicaciones
El Conmutador de aplicaciones es una característica de control importante introducida en iOS 7. Se inicia pulsando dos veces el botón Inicio y muestra las aplicaciones cuyos procesos están activos:
Con el Conmutador de aplicaciones, los usuarios pueden desplazarse por instantáneas de todas las aplicaciones en segundo plano y suspendidas. Al pulsar una aplicación, se inicia en primer plano. Al deslizar hacia arriba, se quita la aplicación del segundo plano, finalizando su proceso. Veremos con más detalle el conmutador de aplicaciones en la demostración del ciclo de vida de aplicaciones de iOS en la sección siguiente.
Importante
El Conmutador de aplicaciones no muestra una diferencia entre las aplicaciones en segundo plano y suspendidas.
Configuración de actualización de aplicaciones en segundo plano
iOS 7 aumenta el control del usuario sobre el ciclo de vida de la aplicación, ya que permite a los usuarios no usar el procesamiento en segundo plano para las aplicaciones registradas para el procesamiento en segundo plano. Esto no impide que las aplicaciones ejecuten tareas en segundo plano.
Los usuarios pueden cambiar esta configuración; para ello, vaya a Configuración > General > Actualización de la aplicación en segundo plano y edite los privilegios de segundo plano de una aplicación seleccionada. Si la actualización de la aplicación en segundo plano está desactivada, la aplicación se suspenderá inmediatamente después de entrar en segundo plano y no podrá realizar ningún procesamiento en segundo plano:
Los desarrolladores pueden comprobar el estado de actualización de la aplicación en segundo plano con la API BackgroundRefreshStatus
. Para obtener un ejemplo, consulte la receta Comprobar configuración de actualización en segundo plano.
Hemos tratado los conceptos básicos del ciclo de vida de las aplicaciones de iOS y las características para controlar el ciclo de vida de la aplicación. A continuación, veamos el ciclo de vida de la aplicación de iOS en acción.