2011-01-25 4 views
5

J'ai question fondamentale en ce qui concerne le moment de unregisterListener pour le gestionnaire de capteur. Faut-il faire en onStop() ou onDestroy().Android: quand désenregistrer l'auditeur - onStop() ou OnDestroy()

USECASE:

Je veux enregistrer accelorometer sur clic de bouton de démarrage et d'arrêt lorsque l'utilisateur clique le bouton d'arrêt. la fréquence des données est chaque minute. J'ai donc commencé un timer.

Mais le problème est chaque fois que le orientation change selon l'architecture Android, onStop() est appelé. Dans onStop() J'annule la minuterie et désinscrit l'auditeur. Donc, encore une fois, si je lance le timer/registre d'écoute à onResume(), la fréquence ne restera pas 1 minute et les données seront enregistrées sans que l'utilisateur n'appuie sur le bouton de démarrage.

Quelqu'un peut-il me aider à résoudre ce problème.

Merci.

Répondre

3

OnDestroy() n'est pas garanti d'être appelé. Donc, vous devriez le faire dans les deux ou onStop

Mais la question est à chaque fois que les changements d'orientation que par l'architecture Android

Il y a une façon d'empêcher que cela se produise dans le manifeste. Je suis sûr que quelqu'un d'autre postera comment.

+0

Je comprends Android La documentation de 'onDestroy' signifie que vous ne devriez pas * enregistrer * les données, car le processus peut être détruit avant d'être appelé. Cependant, dans cette situation, tout auditeur sera également enregistré dans le gestionnaire de capteurs. Quel est le mal dans tout ça? –

+0

A noter également, 'onStop' est pas non plus garanti d'être appelé. –

+0

onPause est le seul garanti. J'ai vu des instances où onStop n'est pas appelé, donc une nouvelle instance de fragment sera appelée onStart lors de la navigation vers l'application, et un écouteur est divulgué (sauf si vous enregistrez des écouteurs avec des balises string, et le nouveau fragment remplace l'ancien listener) – James

4

Vous pouvez utiliser un Service pour exécuter la collecte des données de l'accéléromètre en arrière-plan, communiquer avec lui en utilisant les intentions de base n'est pas trop compliqué.

Ou, si vous voulez seulement « survivre » la rotation, lorsque l'activité se destoryed puis reconstruit, essayez primordial dans vos Activity les méthodes onRetainNonConfigurationInstance() et getLastNonConfigurationInstance() (lire davantage here)

+0

Je l'ai résolu en utilisant onRetainNonConfigurationInstance() et getLastNonConfigurationInstance() méthodes .. merci –

Questions connexes