La mise en œuvre de longue tâches en cours d'exécution en arrière-plan IOS
Je travaille sur une application dans laquelle l'utilisateur peut enregistrer la vidéo à l'aide de AVFoundation
et de l'envoyer au serveur, la vidéo a une taille maximale jusqu'à 15 m, en fonction de la vitesse d'internet & type qu'il peut prendre de 1 à 5 minutes environ pour transférer la vidéo sur le serveur. Je suis le transfert de la vidéo enregistrée sur le serveur dans le thread d'arrière-plan de sorte que l'utilisateur peut continuer d'autres choses sur l'application alors que la vidéo est en cours de téléchargement vers le serveur.
Lors de la lecture de la Pomme de Docs pour la mise en œuvre de longue tâches en cours d'exécution en arrière-plan, je vois que seulement quelques types d'applications autorisées à s'exécuter en arrière-plan.
par exemple,
audio—L'application joue le contenu audible à l'utilisateur, alors que dans le fond. (Ce contenu comprend le streaming de contenu audio ou vidéo à l'aide d'AirPlay.)
T-il se qualifier mon appli, pour l'exécution de tâches en arrière-plan? ou j'ai besoin de transférer la vidéo sur le thread principal?
oui c'est ce que je fais, pourquoi je l'ai mentionné que je veux à l'utilisateur de continuer à faire d'autres choses sur la forme alors que la vidéo est en cours d'enregistrement
Pendant le téléchargement, ur app en arrière plan (accomplir une autre tâche) ou d'entrer dans l'arrière-plan complètement?
seul le processus de téléchargement se passe en arrière-plan, toutes les autres choses reste sur le thread principal et l'utilisateur peut continuer à ajouter des détails à l'intérieur de l'app
exécution en arrière-plan n'est pas de soins sur le thread de votre téléchargement est en cours d'exécution. Si vous parlez de maintien de téléchargement lorsque après que l'utilisateur appuyez sur bouton d'accueil, puis en tâche de fond est ce que vous voulez. Si l'on parle de téléchargement lors de l'exécution du premier plan, alors tu veux dire que sur un thread d'arrière-plan. Thread d'arrière-plan et d'arrière-plan en cours d'exécution sont deux concepts.
OriginalL'auteur nsgulliver | 2013-03-07
Vous devez vous connecter pour publier un commentaire.
NSOperationQueue
est la méthode recommandée pour effectuer le multi-thread tâches afin d'éviter de bloquer le thread principal. Thread d'arrière-plan est utilisé pour les tâches que vous souhaitez effectuer pendant que votre application est inactive, comme le GPS indications ou de streaming Audio.Si votre application s'exécute en premier plan, vous n'avez pas besoin de thread d'arrière-plan.
Pour les tâches simples, vous pouvez ajouter une opération à une file d'attente à l'aide d'un bloc:
Plus d'infos sur NSOperationQueue et comment l'utiliser.
Le processus de téléchargement continuera pendant qu'en arrière-plan, mais votre demande sera admissible à être suspendu, et donc le téléchargement peut annuler. Pour éviter cela, vous pouvez ajouter le code suivant à l'application délégué à dire le système d'exploitation lorsque l'Application est prête à être suspendue:
NSOperationQueue
poursuivra ses tâches?Voir mise à jour de réponse afin d'éviter l'Application en cours de suspension tandis que les inactifs.
Ajouter
*
signe de NSOperationQueue*
operationQueueQu'est-ce que bgTask dans ce contexte ??
un
UIBackgroundTaskIdentifier
OriginalL'auteur
De votre réponse à Dwayne, vous n'avez pas besoin d'être en mesure de télécharger en arrière-plan. Mais plutôt de ce que vous avez besoin est de faire votre téléchargement dans un autre thread (thread d'arrière-plan) à côté de thread principal. Quelque chose comme ça pour PGCD:
Si votre téléchargement tâche sera en mesure de reprendre après une perte de connexion au serveur dépendra de la bibliothèque que vous utilisez aurait cette fonction. L'exécution d'une tâche comme une tâche d'arrière-plan ou dans un thread d'arrière-plan ne serait pas utile si la bibliothèque n'est pas en charge cette fonctionnalité.
et ce sont ces bibliothèques qui ont la capacité de reprendre du service et qui ne l'est pas?
OriginalL'auteur
Votre exigence se qualifie pour s'exécuter en arrière-plan. Vous n'avez pas besoin d'enregistrer l'arrière-plan des modes de prise en charge dans l'info plist. Tout ce que vous devez faire, c'est que lorsque l'application est sur le point d'aller en arrière-plan, demande de temps supplémentaire à l'aide de gestionnaire de tâche en tâche de fond et effectuer votre tâche dans ce bloc. Assurez-vous d'arrêter votre gestionnaire avant 10 minutes afin de ne pas obtenir de la force résilié par l'OS.
Vous pouvez utiliser le code ci-dessous d'Apple.
Pas de. Apple ne rejettera pas parce que vous téléchargez en utilisant le fond de gestionnaire. Tout ce que vous devez faire est de vous assurer que vous arrêtez le gestionnaire avant de 10 minutes de temps, faute de quoi l'appli peut être résilié par l'OS. J'ai fait quelques demandes et je n'ai pas de problème avec Apple.
OriginalL'auteur