2010-06-09 4 views
10

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?

+2

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

+0

Bonne idée! Je vais essayer cela maintenant ... –

+0

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. –

Répondre

10

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.

+9

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. –

+2

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. –

+3

@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. –

1

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.

- PC World Multitasking on Apples iPhone 4

0

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.

+1

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. –

8

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.

1

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".

1

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.

https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

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.

+0

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

1

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.

1

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ù.

0

Vous devez utiliser l'infrastructure de notifications push pour l'ensemble de fonctions que vous créez!

Questions connexes