Iam utilizza una chat dell'app per iPhone utilizza la connessione socket per comunicare con il server. Quando l'app viene spostata sullo sfondo, posso vedere che il server è in grado di comunicare con l'app per circa 5 minuti. Ma dopo questo tempo, la connessione socket viene distrutta. Ma l'applicazione smette di essere eseguita non appena passa allo sfondo. Perché la connessione socket viene mantenuta per 5 minuti ma non l'esecuzione dell'app. Apple Apple specifica l'ora esatta per la quale la connessione verrà mantenuta.connessione socket interrotta dopo che l'app iOS è passata allo sfondo
risposta
è possibile ottenere un tempo massimo di 600 secondi (10 minuti) utilizzando facendo uso di codice riportato di seguito applicationDidEnterBackground:
if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4
if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking
UIApplication *application = [UIApplication sharedApplication]; //Get the shared 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
NSLog(@"\n\nRunning in the background!\n\n");
[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
});
}
}
La documentazione può essere trovato qui http://disanji.net/iOS_Doc/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
Ho appena implementato l'oggetto backgroundTaskIdentifier e Invalidate il background_task per controllare l'ora, l'app era viva ed eseguiva 600 sec. Puoi anche ottenere il tempo residuo utilizzando questo
NSLog(@"Time remaining: %f", application.backgroundTimeRemaining);
Se si sta usando iOS 4.3 o versioni successive, non sono necessarie le due istruzioni iniziali "if". – rmaddy
@rmaddy hai ragione :) –
@chinta Configurare i socket per l'utilizzo VoIP per lo sfondo può essere trovato qui. Molto informativo http://wiseman-safiq.blogspot.in/2010/11/ios-executing-code-in-background.html –
maggior parte delle applicazioni di Apple che entrano lo stato di sfondo vengono spostati allo stato sospesa poco dopo. In questo stato, l'applicazione non esegue alcun codice e può essere rimossa dalla memoria in qualsiasi momento. Le applicazioni che forniscono servizi specifici all'utente possono richiedere il tempo di esecuzione in background per fornire i servizi .
Questo almeno spiega perché l'applicazione si arresta. Perché il tuo server è ancora in grado di comunicare con la tua app per 5 minuti, perché hai impostato un intervallo di tempo molto lungo e non stai chiudendo esplicitamente la connessione socket sulla tua app che entra nello sfondo.
La tua app è registrata come app VoIP? – trojanfoe
no. non è registrato come Voip. – Chinta