Contexte rapide
Par défaut, lorsque certains changements de configuration clés se produisent sur Android (un exemple courant est un changement d'orientation), Android redémarre complètement l'activité en cours pour l'aider à s'adapter à ces changements.
Lorsque vous définissez android:configChanges="keyboardHidden|orientation"
dans votre AndroidManifest, vous dites à Android: "Veuillez ne pas réinitialiser par défaut lorsque le clavier est retiré ou que le téléphone est tourné; je veux gérer cela moi-même. Oui, je sais ce que je fais "
Est-ce une bonne chose? Nous verrons bientôt ...
Pas de soucis?
L'un des avantages avec lesquels vous commencez est qu'il y a:
pas besoin de s'inquiéter de la rotation de votre activité
Dans de nombreux cas, les gens croient à tort que lorsqu'ils ont une erreur générée par un changement d'orientation ("rotation"), ils peuvent simplement la corriger en insérant android:configChanges="keyboardHidden|orientation"
.
Cependant, android: configChanges = "keyboardHidden | orientation" n'est rien de plus qu'un pansement. En vérité, il existe de nombreuses façons de déclencher un changement de configuration. Par exemple, si l'utilisateur sélectionne une nouvelle langue (c'est-à-dire que les paramètres régionaux ont changé), votre activité sera redémarrée de la même manière que par un changement d'orientation. Si vous le souhaitez, vous pouvez afficher une liste de tous les différents types de modifications de configuration .
Edit : Plus important encore, comme le souligne hackbod dans les commentaires, votre activité sera également redémarrée lorsque votre application sera en arrière-plan et Android décidera de libérer de la mémoire en la tuant. Lorsque l'utilisateur revient sur votre application, Android tente de redémarrer l'activité de la même manière qu'il le fait s'il y avait une autre modification de configuration. Si vous ne pouvez pas gérer cela, l'utilisateur ne sera pas content ...
En d'autres termes, l'utilisation android:configChanges="keyboardHidden|orientation"
n'est pas une solution à vos «soucis». La bonne façon est de coder vos activités afin qu'elles soient satisfaites de tout redémarrage qu'Android leur lance. C'est une bonne pratique qui vous aidera sur la route, alors habituez-vous-y.
Alors, quand dois-je l'utiliser?
Comme vous l'avez mentionné, il y a un avantage distinct. Le remplacement du changement de configuration par défaut pour une rotation en le manipulant vous-même accélérera les choses. Cependant, cette vitesse a un prix de commodité.
Pour faire simple, si vous utilisez la même mise en page pour le portrait et le paysage, vous êtes en bonne forme en effectuant l'écrasement. Au lieu d'un rechargement complet de l'activité, les vues se déplaceront simplement pour remplir l'espace restant.
Cependant , si pour une raison quelconque vous utilisez une mise en page différente lorsque l'appareil est en mode paysage, le fait qu'Android recharge votre activité est bon car il chargera alors la mise en page correcte. [Si vous utilisez le remplacement sur une telle activité et que vous souhaitez effectuer une reconfiguration magique lors de l'exécution ... eh bien, bonne chance, c'est loin d'être simple]
Résumé rapide
Bien sûr, si cela vous android:configChanges="keyboardHidden|orientation"
convient, utilisez-le. Mais S'IL VOUS PLAÎT, assurez-vous de tester ce qui se passe lorsque quelque chose change, car un changement d'orientation n'est pas le seul moyen de déclencher un redémarrage complet de l'activité.