Aplicación iOS ejecutando tareas en segundo plano

Me preguntaba si podría enviar algunas llamadas de service web mientras mi aplicación está en segundo plano. ¿Cómo lo hace skype? Incluso si presiono el button de inicio, mi llamada permanece conectada.

Basándose en lo que declararon los rckoenes, las aplicaciones pueden registrar las tareas en segundo plano para que se completen después de que el usuario llegue al button de inicio. Hay un límite de time de 10 o 15 minutos para que estas tareas se completen. Una vez más, puede registrar una tarea para completar inmediatamente después de que el usuario llegue a su casa, esto NO le permite ejecutar código, digamos una hora después de que salen de la aplicación.

UIApplication* app = [UIApplication shanetworkingApplication]; 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 admite versiones de iOS anteriores a las iOs 4, también debe comprobar para asegurarse de que la multitarea es compatible antes de registrar una tarea en segundo plano. Use algo parecido a:

 UIDevice* device = [UIDevice currentDevice]; BOOL backgroundSupported = NO; if ([device respondsToSelector:@selector(isMultitaskingSupported)]) backgroundSupported = device.multitaskingSupported; 

Pruebe este … Excelente código para ejecutar aplicaciones en segundo plano sin límite de time. (Lo probé para download más de 600 MB de datos del service web.)

 - (void)applicationDidEnterBackground:(UIApplication *)application { UIApplication *app = [UIApplication shanetworkingApplication]; UIBackgroundTaskIdentifier bgTask; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask]; }]; } 

Actualización ::

puede encontrar más información sobre multitaksing en esta ejecución de background de documentos de Apple .

Prueba en el dispositivo.

Depende o qué tipo de aplicación está tratando de codificar. Skype está registrado como una aplicación de VoIP (aplicación de larga duración) y es por eso que puede permanecer "en ejecución" aunque está en segundo plano.

Apple separa las aplicaciones en tres:

  • Ejecutar tareas de longitud finita (puede ejecutar tareas por un time finito)
  • Descarga de contenido en segundo plano (puede download contenido para presentarlo al usuario cuando la aplicación se vuelva a activar)
  • Implementación de tareas de ejecución prolongada (esta es la categoría de aplicaciones de background más interesantes, con algunas subcategorías que el desarrollador debe definir para su aplicación)

    • Aplicaciones que reproducen contenido audible para el usuario mientras está en segundo plano, como una aplicación de reproductor de música
    • Aplicaciones que registran contenido de audio en segundo plano
    • Aplicaciones que mantienen a los usuarios informados de su location en todo momento, como una aplicación de navigation
    • Aplicaciones que admiten Voz sobre Protocolo de Internet (VoIP) (SKYPE está aquí)
    • Aplicaciones que necesitan download y procesar contenido nuevo regularmente
    • Aplicaciones que reciben actualizaciones periódicas de accesorios externos.

Por lo tanto, debe evaluar en qué categoría se encuentra su aplicación y qué realiza su operación de service. Tal vez si está enviando algunas cosas pequeñas al service, el mejor enfoque es solo solicitar un time extra en el background para hacer el trabajo.

Más información sobre todo esto está en este enlace:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html