Depuis que la première version bêta est sortie, j'ai essayé de savoir si le "vrai" multitâche est possible - c'est-à-dire pouvez-vous mettre un programme en arrière-plan et le conserver indéfiniment? Je pense aux applications IM ou IRC, par exemple. J'ai compilé une application moi-même sur iOS 4, et sans changer une chose, est apparu pour rester en arrière-plan, mais pour tout ce que je sais, il était juste suspendu à la mémoire. Les docs disent que le mieux que vous pouvez faire est de demander jusqu'à 10 minutes, mais dans la présentation du développeur, ils ont montré Skype assis en arrière-plan et ensuite informer l'utilisateur qu'un appel entrait. Est-ce que quelqu'un sait avec certitude comment tout cela fonctionne?Est-ce que iOS 4 rend le "Real Multitâche" disponible aux développeurs tiers?
Répondre
Il semble que la réponse est non. L'API pour Skype est un cas très spécial, appelé le mode "voip", et nécessite un comportement spécial, tel que le marquage de la socket utilisée pour la VoIP.
Vous pouvez recevoir des notifications d'alarme en arrière-plan (telles que le temps écoulé). La durée pendant laquelle vous êtes dans l'état d'exécution en arrière-plan est fortement limitée par le système d'exploitation.
Le modèle d'arrière-plan d'Android est complet et, à bien des égards, beaucoup plus agréable.
Apple propose un guide intitulé «Prise en charge du multitâche dans vos applications» que vous devriez être en mesure de localiser.
Le mode d'arrière-plan entièrement opérationnel est plus facile à gérer pour les développeurs, mais brutal sur la durée de vie de la batterie. C'est le compromis de conception qu'Apple a fait ici. Ne pas être un apologiste d'Apple, mais vous pouvez comprendre le choix de conception si vous pensez comme un utilisateur au lieu d'un développeur. –
Je le veux en tant qu'utilisateur. Je veux des applications IRC et de chat adéquates, et je veux que les développeurs soient libres de faire ce qu'ils doivent faire pour créer les applications que je veux. Peut-être que je suis un utilisateur geek, et pas typique, mais je pense toujours comme un utilisateur. –
@pkulak et inversement, vous voulez une vie de pâte qui n'est bonne que pour quelques heures pour ce que vous voulez. Les utilisateurs finaux non-développeurs réels, veulent un téléphone qui dure toute la journée et fait ce dont ils ont besoin, ils ne se soucient pas de savoir comment il le fait. Si cela semble faire ce que vous "voulez" mais ne le fais pas comme vous pensez que cela devrait être fait, quelle est la différence. –
Les applications iOS 4 peuvent être exécutant ou suspendues. Le système d'exploitation essaiera de conserver autant d'applications demandées que possible en mémoire, tandis que toutes les autres applications seront suspendues.
Les applications exécutées dans le arrière-plan peuvent accéder à des fonctionnalités telles que la navigation, audio, la voix sur IP (mais pas messagerie instantanée). Donc, il semble que vous pourriez ne pas avoir de chance.
Vous pouvez être intéressé par this blog post qui décrit comment "multitâche" fonctionne dans des systèmes tels que iPhone OS 4 et Android.
Notez que Android n'a pas les mêmes limites sur services comme iOS. Il est tout à fait possible d'avoir un service connecté au réseau en continu en arrière-plan, contrairement à iOS. Le service peut être démarré et arrêté par l'application (ou elle-même), et le service peut lancer des intentions (beaucoup plus flexible que l'homologue iOS). Les notifications mentionnées sont nommées «diffusions» dans Android et ne nécessitent pas de service actif. –
Les documents pour développeurs iOS 4 d'Apple décrivent tout cela très clairement. Lorsque votre application est fermée ou déconnectée, elle est presque immédiatement "suspendue", ce qui signifie que le système d'exploitation gèle l'état de l'application. Lorsque l'utilisateur revient à votre application, votre code continue de s'exécuter exactement là où il ne l'était plus. Vous n'avez pas besoin pour ajouter un code à votre application pour ce faire, il suffit de le compiler contre OS 4.
Ce qui précède est vrai dans la plupart des cas. 1) Si le périphérique commence à manquer de mémoire, le système d'exploitation commencera à mettre fin aux applications suspendues qui n'ont pas été basculées depuis un certain temps, sans avertissement. C'est pourquoi il est dans votre intérêt que votre application se souvienne de son état, donc si votre application est terminée, puis rouverte, l'utilisateur ne s'en aperçoit pas vraiment, car il revient à l'endroit où il s'était arrêté.
2) Votre application utilise l'une des API «background». Ce sont pour la lecture audio, les services VoIP, ou les services de localisation.Dans ce cas, votre application est autorisée à continuer à s'exécuter en arrière-plan mais n'a accès qu'à ces API. En outre, votre application peut désigner certaines tâches de longue durée comme des «tâches d'arrière-plan» devant être terminées avant la suspension ou l'arrêt de l'application, comme le téléchargement de photos sur Flickr ou le rendu d'une vidéo, etc. La méthode ne couvre pas les serveurs ping indéfiniment, car il y a une limite de temps pour la tâche, après quoi elle sera arrêtée de force. Les applications qui ont besoin de ce genre de fonctionnalités devraient implémenter des notifications push, comme avant.
Cela devrait éclaircir cela. Dans l'ensemble, je pense que c'est une solution assez élégante au multitâche sur un appareil mobile.
Il est possible que les applications demandent l'heure d'arrière-plan. Lisez les docs. Je dirais que iOS est "contrôlé multitâche".
Vous pouvez créer une tâche d'arrière-plan longue durée, je crois que ceux-ci peuvent inclure des fonctionnalités de mise en réseau. Il suffit de définir l'indicateur de tâche d'arrière-plan sur le bloc de travail.
le système d'exploitation peut limiter exactement combien de temps vous obtenez bien ... il vous dira quand votre temps est écoulé, vous donnant une chance de nettoyage bien.
Il est important de faire le plus de nettoyage possible avant de passer en arrière-plan. Si le téléphone manque de mémoire et doit tuer votre application, vous n'obtenez aucun avertissement, vous êtes simplement tué. – kubi
iOS 4 a "réel" multitâche dans une certaine mesure. Deux éléments sont à prendre en compte:
- La boucle d'événement de l'interface utilisateur est une tâche unique. Ainsi, seule l'application frontale s'exécute sur la boucle d'événement de l'interface utilisateur. Pas une grosse affaire: détachez votre code principal de la boucle d'événement de l'interface utilisateur (peut-être vous avez besoin de re-concevoir votre application).
- Le système d'exploitation peut "terminer" votre application si certains critères sont remplis (par exemple, une mémoire insuffisante).
Actuellement, l'un de ces critères est que la durée d'exécution est limitée à 10 minutes (temps réel et non temps cpu). Cependant, je m'attends à ce que cela change et voir de meilleurs critères pour la terminaison de l'application de fond (j'espère). En plus, vous pouvez avoir timers (event loops) in background.
en fait, vous pouvez le faire, bien que ce ne soit pas autorisé par Apple. u dois mettre en place un toolchain dans ur mac et utiliser certains SDK officieux ...
check http://code.google.com/p/iphone-backgrounder/ pour plus d'informations
Il n'y a pas multitâches réel dans iOS 4.2 même. parce que les applications seront seulement autorisés à finir la tâche liée aux états..pour un petit intervalle de temps et alors il sera en état suspendu .. Si vous définissez la tâche d'arrière-plan pour un long intervalle de temps alors ... il se comportera de manière inattendue aucune méthode ne sera appelée lorsque vous essaierez d'exécuter l'application à partir de n'importe où.
Vous devez utiliser l'infrastructure de notifications push pour l'ensemble de fonctions que vous créez!
- 1. Tutoriel iOS 4 multitâche
- 2. Comment désactiver la commutation rapide d'applications (multitâche) sur iOS 4?
- 3. NSURLConnection et multitâche dans iOS
- 4. iOS SDK 4.0 (multitâche) numéro
- 5. Quelles sont les implications du multitâche dans iOS 4.0 pour les développeurs?
- 6. Existe-t-il un moyen d'interdire le multitâche dans iOS 4?
- 7. Applications prenant en charge le multitâche dans iOS 4 et les schémas d'URL personnalisés
- 8. Comment gérer le multitâche dans les applications basées sur OpenGL ES sur iOS 4?
- 9. La prise en charge du multitâche dans iOS 4 signifie-t-elle l'abandon du support pour iOS 3?
- 10. CFPreferencesCopyAppValue ne fonctionne pas sous iOS 4
- 11. iOS 4 questions GCD
- 12. Fonction dépréciée dans ios 4
- 13. Guidez-moi sur iOS Programme des développeurs
- 14. Qu'est-ce que le multitâche préemptif?
- 15. iOS 4 Build SDK
- 16. Three20 et iOS 4
- 17. Lien dynamique dans IOS 3 avec la bibliothèque IOS 4
- 18. locationServicesEnabled pour iOS 3 et iOS 4
- 19. directoryContentsAtPath déprécié iOS 4
- 20. OCMock sur iOS 4
- 21. tout outil tiers disponible pour le téléchargement de fichiers multiples
- 22. comment faire une application multitâche dans iOS 4.0
- 23. Que faire avec Javadoc tiers
- 24. iOS: détection de l'ouverture de la barre multitâche
- 25. fstat() rompu dans iOS 4
- 26. iOS 4: FigCreateCGImageFromJPEG retourne -1
- 27. icônes app Localiser les dans iOS 4
- 28. iPhone iOS 4 addTimeInterval obsolète
- 29. multitâche et retourner à l'application
- 30. iPhone OS 4 multitâche - Lecture audio En arrière-plan
J'ai 0 expérience iOS, donc cela peut ne pas être utile. Cependant, pourquoi ne pas le faire juste en courant en arrière-plan pour voir s'il est en cours d'exécution (par exemple, mettre à jour un compteur toutes les secondes)? – Cam
Bonne idée! Je vais essayer cela maintenant ... –
Je viens de mettre en place une minuterie à feu chaque seconde et ping sur mon serveur web. Effectivement, la minuterie a cessé de tirer lorsque l'application est passée en arrière-plan, même si quand il est revenu, il est retourné à l'état où il était quand il a été suspendu. –