2017-04-02 4 views
4

Je dois pouvoir programmer des tâches d'arrière-plan. Un petit "cron" si vous voulez, qui exécute du code simple. Sans être un expert en GCD Je me demandais:Tâche d'arrière-plan GCD maximale TTL

  1. Quel est le temps maximum que j'attends la tâche de fond pour exécuter effectivement ses fonctions en arrière-plan avant que des applications se ferme complètement
  2. Can I « programme » de multiples tâches et attendez-vous à ce qu'ils soient terminés dans les délais
  3. Sont-ils actifs uniquement tant que l'application est lancée? (Je parie qu'ils sont, contrairement aux notifications locales qui ne se soucient pas vraiment si l'application fonctionne en arrière-plan ou non, donc juste demander d'être sûr)
  4. Comment puis-je les suivre et les annuler si nécessaire?

    Par exemple, je peux faire quelque chose comme ceci et la tâche est effectuée. Je suis allé aussi loin que 1 minute ici et ça fonctionne.

    let backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: nil) 
    DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 60) { 
          // Some action here 
          UIApplication.shared.endBackgroundTask(backgroundTaskIdentifier) 
    }) 
    
+0

Possible duplication de [Combien de temps Apple permet-il d'exécuter une tâche en arrière-plan?] (Http://stackoverflow.com/questions/28275415/how-long-does-apple-permit-a-background-task-to- Exécuter) –

+0

Marqué comme un doublon, je sais que vous avez plusieurs questions, mais avant de poser plusieurs questions, vous devez les rechercher individuellement et exclure les doublons. Quand vous le faites, éditez votre question et frappez-moi, je vais supprimer le drapeau en double. –

Répondre

0

Vous pouvez imprimer le temps restant pour une session donnée à l'aide backgroundTimeRemaining (docs here). Apple ne fait aucune garantie quant à ce que sera cette période, elle varie en fonction du niveau de la batterie, du matériel, des ressources, etc., donc probablement pas bon pour une longue tâche persistante en arrière-plan. Vous voudrez peut-être envisager le background fetch API, bien que cela soit étranglé de la même manière par iOS et que vous n'ayez pas un contrôle complet sur son exécution.