2010-07-15 6 views
0

Je rencontre un problème avec le blocage d'indicateur d'activité lorsque je déplace l'application vers l'arrière-plan, puis la ramène au premier plan. L'application peut charger certaines données sur le réseau lorsqu'elle est déplacée en arrière-plan. Par conséquent, je montre un indicateur d'activité à l'utilisateur. J'ai ajouté le code pour m'assurer que la tâche se termine en arrière-plan. Lorsque l'application est immédiatement mise à l'avant-plan et que les données ne sont pas complètement chargées, le bouton rotatif reste sur l'écran mais s'arrête de tourner. Lorsque les données sont complètement chargées, le spinner disparaît.UIActivityIndicatorview se bloque lorsque l'application passe au premier plan iOS4

Toute idée de pourquoi l'indicateur d'activité se fige et ce qui pourrait être une solution possible.

Merci.

Répondre

5

Il n'y a pratiquement aucune raison pour qu'une application en arrière-plan mette à jour son interface utilisateur.

Pour celui qui est là pour le voir? Une autre raison pour laquelle l'indicateur se fige est que le fait d'aller en arrière plan arrête les mises à jour de l'interface utilisateur et les animations qui drainent inutilement la batterie de l'appareil et ralentissent l'application de premier plan. Depuis l'excellent iPhone Application Programming Guide d'Apple, la méthode de délégation d'application -applicationWillEnterForeground: est appelée à chaque fois que l'application arrive en premier plan.

Vous pouvez remplacer cette méthode et ajouter une logique pour réactiver les widgets ici. Ou vous abonnez votre classe (contrôleur de vue, etc.) pour écouter la notification UIApplicationWillEnterForegroundNotification. Si vous écoutez cette notification, vous pouvez appeler un sélecteur qui met à jour l'état de l'interface utilisateur, compte tenu de ce que fait l'application à ce moment-là.

+0

Merci Alex. Une autre question - lorsque l'application arrive au premier plan, elle met à jour une tableview avec les données récupérées et cache l'indicateur d'activité. Donc, si elle réveille l'interface utilisateur, pourquoi ne réveille-t-elle pas l'animation de l'indicateur d'activité? Ne devrait-il pas reprendre le filage au premier plan s'il l'arrêtait en arrière-plan? –

+0

Le système d'exploitation peut ne pas garder trace des animations qu'il a interrompues lorsque votre application est passée en arrière-plan. Elle souhaite simplement arrêter ces mises à jour de l'interface utilisateur. Il est de votre responsabilité, alors, de mettre à jour l'état de l'interface utilisateur en entrant dans le premier plan. La vue de table peut être mise à jour parce que vous pouvez avoir la logique dans '-viewDidAppear:' ou semblable qui déclenche la vue de table pour recharger ses données. –

+0

J'essaye de faire à nouveau l'animation de spinner dans applicationWillEnterForeground en appelant startAnimating sur l'indicateur d'activité. Mais ça ne fait rien. Si je vérifie isAnimating value, il affiche TRUE. Mais le fileur est toujours gelé. –

Questions connexes