ios objective-c background-process

¿Cómo se manejan los tipos UIBackgroundFetchResult en segundo plano de iOS después de llamar al controlador de finalización?



objective-c background-process (1)

Después de que la aplicación complete sus acciones durante una búsqueda en segundo plano, debe llamar al bloque completedHandler con uno de los tres estados UIBackgroundFetchResultNoData : UIBackgroundFetchResultNoData , UIBackgroundFetchResultNewData , o UIBackgroundFetchResultFailed .

¿Cómo son manejados por el sistema operativo cada uno de estos tres resultados una vez que se llama al controlador de finalización?


De la guía de programación de aplicaciones de la aplicación iOS :

Cuando se llama a la aplicación: performFetchWithCompletionHandler: método de su delegado, use ese método para verificar si hay contenido nuevo y descargarlo si está disponible. Cuando sus descargas estén completas, ejecute el bloqueo del controlador de finalización provisto, pasando un resultado que indica si el contenido estaba disponible. La ejecución de este bloque le dice al sistema que puede mover su aplicación nuevamente al estado suspendido y evaluar su uso de energía. Las aplicaciones que descargan pequeñas cantidades de contenido reflejan de manera rápida y precisa cuando tenían contenido para descargar tienen más probabilidades de recibir tiempo de ejecución en el futuro que las aplicaciones que demoran más en descargar su contenido

No nos dan tantos detalles, pero creo que es lo suficientemente claro: usted pasa el resultado de la recuperación al Sistema, por lo que puede decidir cuándo dar el tiempo de ejecución en segundo plano (y cuánto).
Ejemplo, considera dos aplicaciones diferentes:
- Uno descarga archivos que se actualizan cada noche.
- los otros archivos de descarga que se actualizan con más frecuencia, muchas veces en un día

En ambos casos, el sistema activará su aplicación, tomará nota de la hora de inicio, la aplicación iniciará la descarga y luego le informará al sistema si había o no contenido disponible.

Después de un tiempo, verá que el sistema activará la primera aplicación con menos frecuencia que la segunda, optimizando el consumo de la batería.

Además, si usa NSURLSession para iniciar la descarga, el sistema evaluará el consumo de energía de su aplicación (ya que con NSURLSession usted tiene un tiempo "ilimitado" para descargar archivos), incluso esta métrica se usa para decidir con qué frecuencia reactivar su aplicación.