2010-11-08 15 views
8

experts Hallo,Seule applicationWillResignActive appelée lorsque l'iPhone s'éteint?

J'ai testé ce qui happing avec mon application lorsque l'iPhone est éteint lorsque l'application est actif. Pour ce faire, j'ai connecté les méthodes de rappel du cycle de vie de l'application dans la console du débogueur xcode.

Le résultat était: Lorsque j'appuie sur le bouton marche/arrêt de l'appareil pendant un certain temps, applicationWillResignActive est appelée. L'iPhone montre une option pour éteindre l'appareil sur l'écran. Si je reconnais éteindre, l'iPhone s'éteint. Mais apparemment pas d'autres méthodes de rappel comme applicationDidEnterBackground ou applicationWillTerminate sont appelés. Par conséquent toutes les données seraient perdues si je ne l'enregistrais pas dans applicationWillResignActive. Bien que le iOS Application Programming Guide indique, on devrait enregistrer les données d'une application dans applicationDidEnterBackground et applicationWillTerminate. D'après vous, l'une des deux méthodes est-elle toujours appelée et n'est plus imprimée dans la console? Cordialement

+0

Observation intéressante. Il semble possible qu'il soit appelé par la console est déconnecté d'ici là, mais je parie qu'il ne s'appelle même jamais. Mon intuition est que les applications iOS sont traitées comme la résiliation soudaine d'OSX, donc le processus est tué sans notification. Mais là encore je parie que les utilisateurs éteignent très rarement leur appareil (s'ils savent même comment). –

+0

Mais l'appareil s'arrête également si la batterie est vide. Il est difficile de tester le comportement d'une application dans le cas d'une batterie vide. Parce que si vous connectez votre iPhone à l'ordinateur de développement pour enregistrer les méthodes de rappel dans la console, il est chargé! Mais je suppose que l'application se comporte de manière similaire à la désactivation manuelle de cas. – Coco

+1

J'ai testé sur 3GS sous iOS 5.0 ... si la désactivation est reconnue, applicationDidEnterBackground et applicationWillTerminate sont appelés! L'appareil s'est connecté à la console avant de s'éteindre. – Dev

Répondre

1

Je pense que votre test est probablement correct. L'application n'est plus active mais elle n'est pas passée en arrière-plan - un peu comme quand j'appelle - donc je pense que les notifications ont un sens.

Que devriez-vous faire à ce sujet? Ma suggestion ne serait rien. Il me semble que cet événement arrive si rarement qu'il ne vaut pas la peine de s'inquiéter. Si vous voulez passer à la ceinture et à l'accolade, alors l'état d'enregistrement dans 'applicationWillResignActive' devrait fonctionner tant qu'il n'y a pas beaucoup à stocker.

3

J'ai fait quelques tests supplémentaires:

J'ai sauvé les méthodes du cycle de vie dans une base de données appelées et éteint l'iPhone alors que l'application mai était en marche. En fait, seul le code applicationWillResignActive est appelé. Mais après l'arrêt de mon application réside dans l'état "ne fonctionne pas", car le lancement initie les appels de application:didFinsihLaunchingWithOptions: et applicationDidBecomeActive. Les données d'application sont donc perdues si je ne les sauvegarde pas dans applicationWillResignActive.

Si la batterie est vide alors qu'une application est en cours d'exécution applicationDidEnterBackground et applicationWillTerminate sont appelés (aucun appel de applicationWillResignActive!).

0

Je l'ai testé. C'est l'ordre dans lequel les méthodes sont appelées.

  1. applicationWillResignActive - lorsque l'utilisateur tient longtemps le bouton de verrouillage de l'appareil (et un curseur est présenté demandant à l'utilisateur « Slide pour éteindre »

Si vous faites glisser, l'appareil appellera deux méthodes suivantes dans votre application dans l'ordre ci-dessous

  1. applicationDidEnterBackground

  2. applciationWillTerminate

L'appareil s'éteint.

Je suppose que la même chose se produit lorsque la batterie se vide.

Cela a été testé sur 3Gs iOS 5.0 marchepieds

Hope this helps.