PerformSelector After delay ne fonctionne pas en mode d'arrière-plan - iPhone
J'ai une application voip qui fonctionne en permanence sur l'arrière-plan.
Alors que je suis dans le fond je suis d'appeler depuis le thread principal: (pour établir la connexion réseau en cas de diagnostic d'un réseau de perdu).
[self performSelector :@selector(Reconnect:) withObject:nil afterDelay:60.0];
Cependant, l'outil de sélection n'est effectuée que lorsque mon appli revient à l'avant plan.
Dois-je faire quelque chose en particulier à faire le sélecteur se exécutée alors que dans le fond ?
Grâce
Edit:
-(void) reconectInBackgroundAfterDelay:(NSTimeInterval) dealy
{
NSLog(@"reconectInBackgroundAfterDelay");
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
//Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performSelector :@selector(Reconnect:) withObject:nil afterDelay:dealy];
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
J'ai ajouté ce code à la place, mais encore les "Reconnecter" la méthode n'est pas appelée après que la condition de délai.
J'appelle le "reconectInBackgroundAfterDelay" la méthode alors que je suis déjà dans l'arrière-plan.
Toutes les autres suggestions ?
Edit 2
Trouvé une solution. Voir ci-dessous
source d'informationauteur Idan
Vous devez vous connecter pour publier un commentaire.
La seule solution que j'ai trouvé jusqu'à présent :
Avez-vous mis cette ligne dans le
beginBackgroundTaskWithExpirationHandler
bloc? Jetez un oeil à la section Remplir une Longueur Finie de la Tâche en arrière-plan à http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html.J'ai été le tester pendant un certain temps, a constaté que dans ios fond exécuter quand un corebluetooth événement à venir, si vous voulez faire quelque chose de retarder l'utilisation NSTimer objet,vous devez être inférieur à 10 secondes, et si plus de 10 secondes, le compteur ne sera pas valide.