Me preguntaba si podría enviar algunas llamadas al servicio web mientras mi aplicación está en segundo plano. ¿Cómo lo hace Skype? Incluso si presiono el botón de inicio, mi llamada permanece conectada.Aplicación iOS ejecutando tareas en el fondo
Respuesta
Basándose en lo que afirmaron los rckoenes, las aplicaciones pueden registrar tareas en segundo plano que deben completarse después de que el usuario presione el botón de inicio. Hay un límite de tiempo de 10 o 15 minutos para completar estas tareas. Nuevamente, puede registrar una tarea para completar inmediatamente después de que el usuario llegue a su casa, esto NO le permite ejecutar el código, digamos una hora después de que salen de la aplicación.
UIApplication* app = [UIApplication sharedApplication];
task = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:task];
task = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Do the work associated with the task.
NSLog(@"Started background task timeremaining = %f", [app backgroundTimeRemaining]);
if (connectedToNetwork) {
// do work son...
}
[app endBackgroundTask:task];
task = UIBackgroundTaskInvalid;
});
ACTUALIZACIÓN: si su aplicación es compatible con versiones anteriores de iOS a iOS 4, también debe comprobar para asegurarse de que la multitarea es compatible antes de registrar una tarea en segundo plano. Use algo similar a:
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
backgroundSupported = device.multitaskingSupported;
A partir de iOS 7 el tiempo de ejecución de fondo se redujo de 10 minutos a 3 minutos. – user3847320
@ user3847320, cualquier documento, por favor ... –
@GaneshGuturi No hay documentación directa, y Apple declara explícitamente que el tiempo de fondo se asigna de forma oportunista, en función de una serie de variables. El seguimiento y el error (al iniciar sesión en UIApplication.shared.backgroundTimeRemaining) indican el tiempo de ejecución de 3 minutos. Esto, por supuesto, podría cambiar a discreción de Apple. – user3847320
Pruebe esto ... Excelente código para ejecutar la aplicación en segundo plano sin límite de tiempo. (Lo probé por la descarga de más de 600 MB de datos del servicio web.)
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
}
actualización ::
podemos encontrar más información sobre multitaksing en este documento manzana Background Execution.
favor prueba en el dispositivo.
Depende de qué tipo de aplicación está intentando codificar. Skype está registrado como una aplicación VoIP (aplicación de larga duración) y es por eso que puede seguir "funcionando" aunque esté en segundo plano.
de Apple separa aplicaciones en tres:
- Ejecución de tareas Finito de longitud (se puede ejecutar tareas de una cantidad finita de tiempo)
- Descarga de contenido en el fondo (se puede descargar el contenido de presentarlo a el usuario cuando la aplicación vuelve a ser activo)
Tareas para la aplicación de marcha largas (Estos son los antecedentes más interesantes aplicaciones de la categoría, con algunas subcategorías que el desarrollador debe definir para su aplicación)
- Aplicaciones que se puede escuchar el contenido audible para el usuario, mientras que en el fondo, como una aplicación de reproductor de música
- Aplicaciones de que el contenido de audio expediente mientras que en el fondo
- Aplicaciones que mantienen informados a los usuarios de su localización en todo momento, tales como una aplicación de navegación
- Aplicaciones que soportan Voz sobre Protocolo de Internet (VoIP) (Skype es aquí)
- aplicaciones que necesitan descargar y procesar nuevos contenidos regularmente
- Aplicaciones que reciben actualizaciones periódicas de los accesorios externos
Por lo tanto, debe evaluar en qué categoría es su aplicación y cuál es el funcionamiento de su servicio. Tal vez si está enviando algunas cosas pequeñas al servicio, el mejor enfoque es solo solicitar un tiempo extra en el fondo para hacer el trabajo.
Más información acerca de todo esto está en este enlace:
- 1. Ejecutando matlab en el fondo
- 2. iOS Aplicación Descarga de fondo
- 3. Cancelar tareas de fondo
- 4. ejecutando procesos en el fondo php
- 5. Tareas de fondo en appengine
- 6. Ejecutando tareas Dependientes en paralelo en Java
- 7. Maven Antrun No ejecutando tareas
- 8. Ejecutando tareas de cron en Heroku
- 9. Audio de fondo iOS en una aplicación web
- 10. ¿Puede una aplicación de iOS recibir una advertencia de memoria en el fondo?
- 11. Ejecutando el perfilador en un agente de fondo
- 12. ejecutando el comando de shell en el fondo del script
- 13. ¿Se está ejecutando un subproceso en iOS?
- 14. Comportamiento de subprocesos al ingresar fondo en iOS multitarea
- 15. iOS AVAudioPlayer detiene la música de fondo de otra aplicación
- 16. iOS: finalización de una tarea al ingresar el fondo
- 17. iOS Voip Socket no se ejecutará en el fondo
- 18. Guardar aplicación en forground (iOS)
- 19. Determine el estado de la aplicación presionando el botón de inicio dos veces con la aplicación ejecutando
- 20. Monitoreo de Región de iOS en Modo de Fondo
- 21. Dibujando un hilo de fondo en iOS
- 22. envía un correo electrónico en el Fondo de iOS
- 23. Ejecutando tareas de trabajo secuencialmente en varios entornos usando Jenkins
- 24. aplicación PhoneGap ejecutar Android en el fondo
- 25. MiniProfiler, primeras tareas del fondo EntityFramework y tareas en segundo plano nullreference
- 26. Seguir ejecutando una aplicación después de que la pantalla se bloquee automáticamente - Phonegap (Android/iOS)
- 27. iOS UIView imagen de fondo
- 28. Detectar dispositivo iOS con Jailbreak ejecutando el ejecutable sin firmar
- 29. Ejecutando un programa Java de fondo en Tomcat
- 30. ¿Cómo cambiar el color de fondo del teclado en iOS?
Si usted lee la documentación de Apple en el fondo funcionamiento se verá que sólo se le permite ejecutar su aplicación en segundo plano si, usted está Reproducción de audio, ubicación de monitoreo o su aplicación es cliente VOIP. Si su aplicación no pertenece a ninguna de las categorías anteriores, no tiene suerte. http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html – rckoenes
@rckoenes Esto no es verdad. Puede obtener * algún * tiempo de CPU para tareas finitas * (generalmente alrededor de 10 minutos más o menos) *. Consulte [los documentos] (https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html) – webo80
@ webo80 cierto que puede obtener algo de tiempo, en iOS 9 es mucho menos de 10 min. Pero, en general, puede hacer algo en segundo plano. – rckoenes