web-dev-qa-db-fra.com

Application iOS exécutant des tâches en arrière-plan

Je me demandais si je pouvais envoyer des appels de service Web pendant que mon application était en arrière-plan. Comment fonctionne Skype? Même si j'appuie sur le bouton d'accueil, mon appel reste connecté.

25
Qamar Suleiman

En s'appuyant sur ce que rckoenes a déclaré, les applications sont autorisées à enregistrer les tâches d'arrière-plan à effectuer une fois que l'utilisateur a appuyé sur le bouton d'accueil. Il y a un délai de 10 ou 15 minutes pour effectuer ces tâches. Encore une fois, vous pouvez enregistrer une tâche à terminer immédiatement après que l'utilisateur arrive à la maison, cela ne vous permet PAS d'exécuter du code, disons une heure après avoir quitté l'application.

UIApplication*    app = [UIApplication sharedApplication];
task = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:task];
        task = UIBackgroundTaskInvalid;
    }];
// Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task.
        NSLog(@"Started background task timeremaining = %f", [app backgroundTimeRemaining]);
        if (connectedToNetwork) {
            // do work son...
        }

        [app endBackgroundTask:task];
        task = UIBackgroundTaskInvalid;
    });

MISE À JOUR: si votre application prend en charge les versions d'iOS antérieures à iOs 4, vous devez également vérifier que le multitâche est pris en charge avant d'enregistrer une tâche en arrière-plan. Utilisez quelque chose comme:

UIDevice* device = [UIDevice currentDevice];

BOOL backgroundSupported = NO;

if ([device respondsToSelector:@selector(isMultitaskingSupported)])

   backgroundSupported = device.multitaskingSupported;
34
Nathan Jones

Cela dépend du type d'application que vous essayez de coder. Skype est enregistré en tant qu'application VoIP (application longue durée) et c'est pourquoi il peut rester "en cours d'exécution" bien qu'il soit en arrière-plan.

Apple sépare les applications en trois:

  • Exécution de tâches de longueur finie (vous pouvez exécuter des tâches pendant une durée limitée)
  • Téléchargement de contenu en arrière-plan (vous pouvez télécharger du contenu pour le présenter à l'utilisateur lorsque l'application redevient active)
  • Implémentation de tâches de longue durée (il s'agit de la catégorie d'applications d'arrière-plan la plus intéressante, avec certaines sous-catégories que le développeur doit définir pour votre application)

    • Applications qui lisent du contenu audible à l'utilisateur en arrière-plan, comme une application de lecteur de musique
    • Applications qui enregistrent du contenu audio en arrière-plan
    • Applications qui gardent les utilisateurs informés de leur emplacement à tout moment, comme une application de navigation
    • Applications prenant en charge le protocole VoIP (Voice over Internet Protocol) (SKYPE est ici)
    • Applications qui doivent télécharger et traiter régulièrement de nouveaux contenus
    • Applications qui reçoivent des mises à jour régulières des accessoires externes

Vous devez donc évaluer dans quelle catégorie se trouve votre application et quelles sont les performances de votre opération de service. Peut-être que si vous envoyez de petites choses au service, la meilleure approche consiste simplement à demander un peu de temps supplémentaire pour effectuer le travail.

Plus d'informations sur tout cela sont sur ce lien:

https://developer.Apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

2
halbano