0 votes

L'application iPhone plante lorsque le délai de connexion de l'URL est dépassé

Je suis en train de créer une application iPhone. En cela, lorsque l'application démarre, elle se connecte au serveur et télécharge quelques images avant de continuer avec l'application. Pendant le téléchargement de l'application, elle affichera l'écran de démarrage initial, aussi longtemps que mon serveur pourrait faire un ping sur mon iPhone, cela fonctionne bien. Mais les problèmes commencent lorsque mon serveur prend beaucoup de temps à répondre à la requête NSURL. L'application plante avec l'erreur suivante :

Mon May 14 13:56:34 unknown Springboard[24] : com.xxxx.xxx n'a pas réussi à se lancer à temps

J'ai compris que lorsque de tels problèmes se produisent avec l'application, l'iPhone plante l'application. J'aimerais savoir combien de temps maximum l'iPhone permet à l'application de répondre à de tels problèmes.

Y a-t-il une valeur maximale pour cela?

1voto

Paul Lynch Points 13774

Le minuteur est d'environ 20-30 secondes, mais ce n'est pas important.

Vous téléchargez des données de manière synchrone. Veuillez modifier votre programme pour télécharger de manière asynchrone, en utilisant NSURLConnection. Votre application semblera beaucoup plus rapide et ne courra pas le risque d'être interrompue. Vous pouvez également implémenter la gestion des erreurs pour les délais d'attente.

0voto

Brad Larson Points 122629

Depuis le fichier Readme.txt sur l'exemple de Reachability d'Apple:

L'exemple Reachability démontre l'utilisation asynchrone de l' API SCNetworkReachability. Vous pouvez utiliser l'API de manière synchrone, mais ne faites pas de vérification synchrone par hostName sur le thread principal. Si le périphérique ne peut pas atteindre un serveur DNS ou est sur un réseau lent, un appel synchrone à la fonction SCNetworkReachabilityGetFlags peut bloquer jusqu'à 30 secondes pour résoudre le hostName. Si cela se produit sur le thread principal, le chien de garde de l'application tuera l'application après 20 secondes d'inactivité.

Comme le dit Paul, c'est une très très mauvaise idée de faire des opérations réseau synchrones. Vous devez charger de manière asynchrone sur l'iPhone.

0voto

Gowtham R Points 95

Si votre demande et réponse sont gérées dans le thread principal, l'interface utilisateur et le thread principal seront bloqués et il peut falloir un certain temps pour recevoir une réponse. Si le thread principal est bloqué pendant un certain temps, le WATCH DOG quittera votre application.

La meilleure solution est d'exécuter votre demande dans un thread en arrière-plan ou dans un autre thread.

Par exemple

   if(!backgroundQueue)
    backgroundQueue=[[NSOperationQueue alloc]init];

NSURLRequest *request=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:url]
                                           cachePolicy:NSURLCacheStorageNotAllowed
                                       timeoutInterval:60];

[NSURLConnection sendAsynchronousRequest:request
                                   queue:backgroundQueue
                       completionHandler:^(NSURLResponse *response,NSData *data,NSError *error) {
    if (complete) {
           // gérer votre logique ici
    }
}];

Cette opération est gérée dans un thread en arrière-plan

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X