Sfondo rapido
Per impostazione predefinita, quando si verificano determinate modifiche alla configurazione chiave su Android (un esempio comune è una modifica dell'orientamento), Android riavvia completamente l'attività in esecuzione per aiutarla ad adattarsi a tali modifiche.
Quando definisci android:configChanges="keyboardHidden|orientation"nel tuo AndroidManifest, stai dicendo ad Android: "Per favore, non eseguire il ripristino predefinito quando la tastiera viene estratta o il telefono viene ruotato; voglio gestirlo da solo. Sì, so cosa sto facendo "
È una buona cosa? Vedremo presto ...
Nessun problema?
Uno dei vantaggi con cui inizi è che esiste:
non devi preoccuparti che la tua attività sia stata ruotata
In molti casi, le persone credono erroneamente che quando hanno un errore generato da un cambiamento di orientamento ("rotazione"), possono semplicemente risolverlo inserendo android:configChanges="keyboardHidden|orientation".
Tuttavia, android: configChanges = "keyboardHidden | orientamento" non è altro che un cerotto. In verità, ci sono molti modi in cui una modifica della configurazione può essere attivata. Ad esempio, se l'utente seleziona una nuova lingua (ovvero le impostazioni internazionali sono state modificate), la tua attività verrà riavviata nello stesso modo in cui avviene una modifica dell'orientamento. Se lo desideri, puoi visualizzare un elenco di tutti i diversi tipi di modifiche alla configurazione .
Modifica : Ancora più importante, tuttavia, come sottolinea hackbod nei commenti, la tua attività verrà riavviata anche quando l'app è in background e Android decide di liberare un po 'di memoria uccidendola. Quando l'utente torna alla tua app, Android tenterà di riavviare l'attività nello stesso modo in cui si verificava qualche altra modifica di configurazione. Se non riesci a gestirlo, l'utente non sarà felice ...
In altre parole, l'uso android:configChanges="keyboardHidden|orientation"non è una soluzione per le tue "preoccupazioni". Il modo giusto è codificare le tue attività in modo che siano contente di ogni riavvio che Android le lancia. Questa è una buona pratica che ti aiuterà lungo la strada, quindi abituati.
Quindi quando dovrei usarlo?
Come hai detto, c'è un netto vantaggio. Sovrascrivere la modifica della configurazione predefinita per una rotazione gestendola da soli accelererà le cose. Tuttavia, questa velocità ha un prezzo di convenienza.
Per dirla semplicemente, se usi lo stesso layout sia per il ritratto che per il paesaggio sei in buona forma eseguendo la sovrascrittura. Invece di una ricarica completa dell'attività, le viste si sposteranno semplicemente per riempire lo spazio rimanente.
Tuttavia , se per qualche motivo usi un layout diverso quando il dispositivo è in orizzontale, il fatto che Android ricarichi la tua attività è buono perché caricherà quindi il layout corretto. [Se usi l'override su tale attività e vuoi fare un magico re-layout in fase di esecuzione ... beh, buona fortuna - è tutt'altro che semplice]
Riepilogo rapido
Certamente, se android:configChanges="keyboardHidden|orientation"è giusto per te, allora usalo. Ma PER FAVORE essere sicuri di test di ciò che accade quando qualcosa cambia, perché un cambiamento di orientamento non è l'unico modo per un riavvio completo di attività può essere attivato.