¿Cuánto time permite Apple ejecutar una tarea de background?

Tengo que cargar una matriz de files de imágenes en la database, por lo tanto, tropecé con la guía de ejecución de background de Apple para asegurarme de que la aplicación sigue cargando los datos cuando el usuario suspende o termina mi aplicación.

Pero en la descripción, dice que giving it a little extra time to finish its work si llamamos beginBackgroundTaskWithName:expirationHandler: o beginBackgroundTaskWithExpirationHandler: para iniciar una tarea en segundo plano.

¿Cuánto time es little extra time exactamente?

Corrígeme si estoy equivocado, pero me he topado con un artículo perfecto de Xamarin que discute la function de background de iOS.

Simplemente analizaré dos partes, ios pre 7 y ios 7+:

versión de iOS pre 7

La respuesta es simplemente 600 segundos (10 minutos), la razón es proporcionada por el artículo anterior.

iOS versión 7+

La respuesta es que el sistema de time que le asigna es oportunista. Tendrás que usar la sugerencia de @Gary Riches

 NSLog(@"Time Remaining: %f", [[UIApplication shanetworkingApplication] backgroundTimeRemaining]); 

descubrir. La razón para que sea oportunista es la forma en que iOS 7+ maneja las tareas de background es completamente diferente, ciertamente optimizado. Para ser exactos, tiene un comportamiento intermitente y, por lo tanto, si necesita tareas en segundo plano, como download una gran cantidad de datos, será mucho más efectivo si usa NSURLSession en NSURLSession lugar.

Sin embargo, en mi caso especial, estoy cargando un único object que contiene un file para ser exactos. No tengo que considerar NSURLSession para upload una pequeña cantidad de datos. Y además, es tarea de carga, puede tomar tanto time como desee. Todos los derechos reservados

Para estos visitantes de TL;DR , la respuesta anterior debería ser suficiente. Para más detalles, consulte el artículo anterior.

Si desea cargar sus files cuando la aplicación está en segundo plano, debe usar el service de background de Apple. iOS le dará a su aplicación un time de aprox. 3 minutos (según la experiencia) para completar su tarea y luego eliminará su aplicación.

Apple permite una ejecución más larga de la aplicación en casos especiales. Para eso necesitarás utilizar UIBackgroundModes en tu file info.plist. Para get más información sobre estos casos especiales, consulte la tabla 3-1 en este enlace .

EDITAR
Aquí hay un buen artículo que describe el time de ejecución de la tarea de background y cómo lograr una tarea de background de larga ejecución en iOS.
https://gooddevbaddev.wordpress.com/2013/10/22/ios-7-running-location-based-apps-in-the-background/

La cantidad de time variará según muchas variables diferentes, pero el valor se puede verificar haciendo reference a la propiedad backgroundTimeRemaining en UIApplication:

 NSLog(@"Time Remaining: %f", [[UIApplication shanetworkingApplication] backgroundTimeRemaining]); 

Teóricamente, tienes 5 segundos para cerrar las tareas que quieres hacer en segundo plano, si no lo haces, tu aplicación puede ser eliminada.

Después de eso, puede llamar a 'beginBackgroundTaskWithExpirationHandler' y debe estar preparado en caso de que el 'poco time extra' que da Apple no sea suficiente para las tareas que necesita terminar.

EDITAR:

Cuando una aplicación de iOS pasa a segundo plano, ¿están detenidas las tareas largas? :

Desde la guía de progtwigción de la aplicación para iOS:

 Your app delegate's applicationDidEnterBackground: method has approximately 5 seconds to finish any tasks and return. In practice, this method should return as quickly as possible. If the method does not return before time runs out, your app is killed and purged from memory. If you still need more time to perform tasks, call the beginBackgroundTaskWithExpirationHandler: method to request background execution time and then start any long-running tasks in a secondary thread. Regardless of whether you start any background tasks, the applicationDidEnterBackground: method must still exit within 5 seconds. 

De Raywenderlich: 'Una vez más, no hay garantías y la documentation de la API ni siquiera da un número fijo; así que no confíes en este número. ¡Podría get 5 minutos o 5 segundos, por lo que su aplicación debe estar preparada para cualquier cosa! ':

http://www.raywenderlich.com/29948/backgrounding-for-ios

La cantidad de time que se obtiene después de que su aplicación se basa en antecedentes es determinada por iOS. No hay garantías sobre el time de otorgamiento, pero siempre puede verificar la propiedad backgroundTimeRemaining de UIApplication. Esto te dirá cuánto time te queda. El consenso general basado en la observación es que, por lo general, obtienes 10 minutos. Una vez más, no hay garantías y la documentation de la API ni siquiera da un número fijo; así que no confíes en este número. ¡Podría get 5 minutos o 5 segundos, por lo que su aplicación debe estar preparada para cualquier cosa!