2010-09-09 21 views
2

Avec la mise à jour Android 2.2 est venu une nouvelle application de quai de voiture. Si mon application est au premier plan lorsque j'attrape mon téléphone, mon application est arrêtée ou mise en veille ou quelque chose, et lorsque j'essaie de rouvrir mon application, tout est foiré. Il a perdu ses informations d'état.Pourquoi la station d'accueil de voiture gâche-t-elle mon application?

Est-ce que quelqu'un sait ce que l'application de quai de voiture fait? À tout le moins, il semble que la force tue toutes les applications en cours d'exécution ou un autre comportement destructeur.

Je suppose qu'une fois que nous aurons identifié ce qu'il est en train de faire, je serai capable de coder autour de lui.

Répondre

1

Toutes les applications perdent leur état lorsqu'elles sont tuées. En fait, ils perdent leurs informations lorsque vous changez d'orientation, à moins que vous ne les sauvegardiez spécifiquement (par exemple, dans onSaveInstanceState). Si vous souhaitez que vos informations soient si persistantes qu'elles puissent survivre à un changement d'application (ou à une réinitialisation du système), vous pouvez enregistrer votre état dans les SharedPreferences au lieu de l'ensemble que vous obtenez dans onSaveInstanceState.

Comment sauvegardez-vous actuellement votre état? Est-ce que vous faites cela du tout? Par exemple, vous pouvez également ajouter un récepteur de diffusion pour écouter ACTION_DOCK_EVENT et vérifier l'état pour EXTRA_DOCK_STATE_CAR et enregistrer vos données d'instance, au cas où vous n'aimez pas l'idée générale SharedPreferences.

+0

Mise à jour: Le système appelle d'abord ma méthode 'onRetainNonConfigurationInstance', immédiatement suivi de' onDestroy'. Donc, je sauve mon état, puis onDestroy déclenche une chaîne de destruction, puis quand il est temps de restaurer mon état, l'instance conservée est morte car onDestroy a été appelé et donc mon application a exécuté sa séquence d'arrêt. Je maintiens les états Bluetooth, alors comment suis-je censé savoir si onDestroy est vraiment une destruction ou juste un "faux/temporaire" détruire? –

+1

Comment votre application gère-t-elle un changement d'orientation? Le passage du mode portrait au mode paysage entraînera également onDestroy, suivi immédiatement de onCreate. Il y a un 'Activity.isFinishing()' qui vous dit exactement cela. Consultez la documentation pour l'activité. – EboMike

+0

J'ai utilisé 'android: configChanges' pour bloquer la destruction du changement d'orientation. –

2

Se rendre dans un quai de voiture est un changement de configuration (les applications peuvent donc présenter une interface utilisateur spécifique à la voiture si elles le souhaitent, par exemple). Cela signifie que votre activité passera par son processus normal de destruction et de recréation ultérieure.

Si vous abusez d'Android: configChanges pour ne pas avoir à faire face à cela, alors la réponse est de ne PAS le faire. Comme nous l'avons toujours dit, c'est là pour certains cas spécifiques où vous voulez cette optimisation. Ce n'est pas une excuse pour éviter les changements de configuration. Si votre application ne gère pas correctement les changements de configuration, il y aura toujours plusieurs façons de la casser. La nouvelle fonction de quai de voiture rend juste cela un peu plus évident.

En fait, je recommande fortement que les développeurs font pas utilisent android: configChanges. Garder le comportement normal est un très bon moyen de tester cette partie de votre application pour s'assurer que vous la faites correctement, et qu'elle se comportera correctement lorsque cela vous arrivera pour d'autres raisons (parce que ce sera certainement le cas). Si vous désactivez les changements de configuration pour le changement d'orientation, il est beaucoup plus difficile de tester cette partie de votre application. Sauf pour des situations très inhabituelles, vous devriez vraiment garder le comportement normal ici et le faire fonctionner correctement.