2010-09-28 32 views
0

Je souhaite définir une alarme pendant que l'application passe en arrière-plan. L'alarme doit continuer à fonctionner. Lorsque l'heure de l'alarme expire, je souhaite déclencher une requête http. Est-ce possible? Si oui, devrais-je utiliser ASIHttprequest? Si j'utilise ASIHttprequest, mon application sera-t-elle rejetée?Je souhaite déclencher une requête http lorsque mon application est en arrière-plan

+0

Quelle langue? Quel système d'exploitation? S'il vous plaît ajouter plus d'informations à votre message et tags. – Jeff

+0

Votre application ne sera pas rejetée pour l'utilisation de la version actuelle de ASIHttpRequest. Il y avait un problème l'année dernière avec un appel API privé (voir http://groups.google.com/group/asihttprequest/browse_thread/thread/41ca2c6892fe183a), mais il a été corrigé. Notez cependant que si vous téléchargez trop de données par minute, votre application peut être rejetée. Voir http://stackoverflow.com/questions/1236788/iphone-app-rejected-for-transferring-excessive-volumes-of-data pour plus d'informations. – Greg

+0

Vérifiez la réponse à http://stackoverflow.com/questions/3291840/iphone-app-running-http-requests-while-application-in-background il y a quelques minutes –

Répondre

0

Je ne sais pas pourquoi vous devez effectuer le téléchargement furtif lorsque votre application est en arrière-plan. Quel est le problème de le faire pendant que votre application est en cours d'exécution? Cela dit ...

Oui, c'est possible. Il y a plusieurs astuces que vous pouvez utiliser pour garder votre application en marche pendant que vous arrivez à l'arrière-plan; les plus simples sont "voip" si vous avez une socket ouverte (ou juste une socket UDP, ou si vous pouvez juste dire que vous avez un keepalive) et "audio" (mais vous devez garder la lecture audio, même si tout ce que vous jouez est silencieux).

Je ne recommande pas d'utiliser «voip» à moins que vous ayez testé le vidage de la batterie (cela peut être acceptable si vous vous connectez ou vous connectez uniquement à localhost). AFAIK, Skype utilise "voip"; significativement réduit la vie de la batterie (environ 16-24 heures sur iPhone 4, je n'ai pas attendu assez longtemps pour le savoir).

Je ne recommande pas d'utiliser "audio" — Je pense que vous devez jouer quelque chose (par exemple, le silence) pour que cela fonctionne, ce qui arrête probablement l'application iPod. Il presque certainement draine la batterie. Si vous voulez retarder le téléchargement de plus de quelques minutes, je ne pense pas que les simples "tâches d'arrière-plan" fonctionneront, puisque iOS vous donne un maximum de temps (sauf si je me trompe et que c'est basé sur le temps CPU) utilisé par votre application, mais j'en doute). Vous pouvez vérifier avec quelque chose comme ceci:

-(void)applicationDidEnterBackground:(UIApplication*)application 
{ 
    UIBackgroundTaskIdentifier taskId = [application beginBackgroundTaskWithExpirationHandler:^{NSLog(@"Task expired");}]; 
    NSTimeInterval backgroundTime = application.backgroundTimeRemaining; 
    NSLog(@"Background task for %g seconds ...", (double)backgroundTime); 
    [NSThread sleepForTimeInterval:backgroundTime - 1]; 
    NSLog(@"Background task finishing with %g seconds remaining ...", (double)application.backgroundTimeRemaining); 
    [application endBackgroundTask:UIBackgroundTaskIdentifier]; 
} 

S'il vous plaît, pensez à la batterie enfants !