2015-04-20 5 views
1

J'utilise UIBackgroundtaskIdentifier pour créer une tâche en arrière-plan pour télécharger des images sur le serveur. Lorsque j'apporte l'application en arrière-plan, cela montre que l'application a 179 secondes pour s'exécuter en arrière-plan. Je consigne les réponses du serveur au fur et à mesure qu'elles téléchargent les images une par une.UIBackgroundTask ne se termine pas

[[DataCoordinator sharedInstance] setBackgroundTask:[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 
     NSLog(@"No background task should run now."); 
     [[UIApplication sharedApplication] endBackgroundTask:[[DataCoordinator sharedInstance] backgroundTask]]; 
     [[DataCoordinator sharedInstance] setBackgroundTask:UIBackgroundTaskInvalid]; 
    }]]; 

La chose étrange qui se passe ici est que, après le délai prévu par iOS pour mon application à exécuter en arrière-plan est toujours sur le téléchargement ne se arrête. Supposons que j'ai essayé de télécharger 33 images, et lorsque 179 secondes ont été obtenues, l'application complète a réussi à télécharger seulement 9 images sur 33. Mais le processus ne s'arrête pas. Et l'application continue à télécharger les images restantes.

Répondre

0

Vous ne devez pas compter sur backgroundTimeRemaining. Apple dit que lorsque vous exécutez l'application sur l'arrière-plan l'application peut par tué:

Cette propriété contient la quantité de temps l'application doit fonctionner en arrière-plan avant qu'il ne soit tué de force par le système.

En réalité, vous pouvez avoir quelques secondes ou 5 minutes, cela dépend de beaucoup de chose comme la vie de la batterie, l'utilisation de la mémoire, etc. Vous devez programmer l'application pour faire bonne chose, peu importe ce que backgroundTimeRemaining est affiché.