¿Cómo se mantiene NSTimer cuando la aplicación entra en segundo plano?

Estoy aquí porque a no encontré ninguna solución para mi problema 🙁

Estoy haciendo una aplicación simple en la que tengo que enviar (por socket) algunas informaciones a un server (como GPS l / L, precisión, nivel de batería, etc.).

El código actual funciona bien cuando la aplicación está en primer plano.

myTimer = [NSTimer scheduledTimerWithTimeInterval: 2.0 target:self selector: @selector(sendPosToServer:) userInfo:nil repeats: YES]; myTimer2 = [NSTimer scheduledTimerWithTimeInterval: 3.0 target:self selector: @selector(sendBatteryToServer:) userInfo:nil repeats: YES]; myTimer3 = [NSTimer scheduledTimerWithTimeInterval: 5.0 target:self selector: @selector(sendResToServer:) userInfo:nil repeats: YES]; myTimer4 = [NSTimer scheduledTimerWithTimeInterval: 5.0 target:self selector: @selector(sendQResToServer:) userInfo:nil repeats: YES]; myTimer5 = [NSTimer scheduledTimerWithTimeInterval: 3.0 target:self selector: @selector(sendPrecisionToServer:) userInfo:nil repeats: YES]; 

Todos esos methods se llaman.

Pero cuando la aplicación ingresa en segundo plano, todo el timer se invalida … He leído que iOS detiene automáticamente los timeres. Estoy buscando una manera de llamar a los methods y enviar datos cuando la aplicación está en segundo plano.

Necesito tu ayuda 🙂

Gracias a todos !!

    Necesita leer la guía sobre cómo ejecutar tareas en segundo plano:

    Ejecución en segundo plano y multitarea

    Aquí está mi applicationDidEnterBackground para una de mis aplicaciones. Cuando lo pongo en segundo plano, hace algunos mantenimiento de caching de disco:

     - (void)applicationDidEnterBackground:(UIApplication *)application { //As we are going into the background, I want to start a background task to clean up the disk caches if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking IE iOS 4 if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking UIApplication *application = [UIApplication shanetworkingApplication]; //Get the shanetworking application instance __block UIBackgroundTaskIdentifier background_task; //Create a task object background_task = [application beginBackgroundTaskWithExpirationHandler: ^{ [application endBackgroundTask:background_task]; //Tell the system that we are done with the tasks background_task = UIBackgroundTaskInvalid; //Set the task to be invalid //System will be shutting down the app at any point in time now }]; //Background tasks require you to use asyncrous tasks dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //Perform your tasks that your application requires //I do what i need to do here.... synchronously... [application endBackgroundTask: background_task]; //End the task so the system knows that you are done with what you need to perform background_task = UIBackgroundTaskInvalid; //Invalidate the background_task }); } } 

    }

    De los documentos de Apple:

    Implementación de tareas de background de larga ejecución Para tareas que requieren más time de ejecución para implementar, debe solicitar permissions específicos para ejecutarlas en segundo plano sin que se suspendan. En iOS, solo los types de aplicaciones específicas pueden ejecutarse en segundo plano:

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

    A less que su aplicación caiga en una de estas categorías (y parece que no), entonces no podrá ejecutarse en segundo plano.

    La Guía de progtwigción de la aplicación para iOS enumera las actividades para las que su aplicación puede permanecer activa en segundo plano. Si planea distribuir su aplicación a través de la tienda de aplicaciones, su aplicación deberá realizar una de las actividades enumeradas. Si solo está escribiendo algo para usted, es posible que pueda combinar su funcionalidad en una de las actividades permitidas.