Szybkie tło
Domyślnie, gdy pewne kluczowe zmiany konfiguracji mają miejsce w systemie Android (typowym przykładem jest zmiana orientacji), system Android całkowicie ponownie uruchamia działające działanie, aby pomóc mu dostosować się do takich zmian.
Definiując android:configChanges="keyboardHidden|orientation"
w pliku AndroidManifest, mówisz systemowi Android: „Proszę nie resetować ustawień domyślnych po wyjęciu klawiatury lub obróceniu telefonu; chcę sobie z tym poradzić samodzielnie. Tak, wiem, co robię "
Czy to dobra rzecz? Wkrótce zobaczymy ...
Bez obaw?
Jednym z plusów, od których zaczynasz, jest:
Nie musisz się martwić, że Twoja aktywność została zmieniona
W wielu przypadkach ludzie błędnie uważają, że kiedy mają błąd, który jest generowany przez zmianę orientacji („rotację”), mogą go po prostu naprawić, wprowadzając android:configChanges="keyboardHidden|orientation"
.
Jednak android: configChanges = "keyboardHidden | Orientacja" to nic innego jak bandaid. W rzeczywistości istnieje wiele sposobów wywołania zmiany konfiguracji. Na przykład, jeśli użytkownik wybierze nowy język (tj. Zmienił się język), Twoja aktywność zostanie wznowiona w taki sam sposób, jak w przypadku zmiany orientacji. Jeśli chcesz, możesz wyświetlić listę wszystkich różnych typów zmian konfiguracyjnych .
Edycja : co ważniejsze, jak wskazuje hackbod w komentarzach, Twoja aktywność zostanie również wznowiona, gdy aplikacja będzie działać w tle, a Android zdecyduje się zwolnić trochę pamięci, zabijając ją. Gdy użytkownik wróci do Twojej aplikacji, system Android podejmie próbę ponownego uruchomienia działania w taki sam sposób, jak w przypadku innej zmiany konfiguracji. Jeśli sobie z tym nie poradzisz - użytkownik nie będzie zadowolony ...
Innymi słowy, używanie android:configChanges="keyboardHidden|orientation"
nie jest rozwiązaniem „zmartwień”. Właściwy sposób to zakodować swoje działania tak, aby były zadowolone z każdego restartu systemu Android, który rzuca na nich. To dobra praktyka, która pomoże ci w dalszej drodze, więc przyzwyczaj się do niej.
Kiedy więc powinienem go używać?
Jak wspomniałeś, istnieje wyraźna zaleta. Nadpisanie domyślnej zmiany konfiguracji dla rotacji przez samodzielną obsługę przyspieszy działanie. Jednak ta prędkość ma swoją cenę wygody.
Mówiąc prościej, jeśli używasz tego samego układu zarówno w orientacji pionowej, jak i poziomej, jesteś w dobrej formie, wykonując nadpisanie. Zamiast pełnego ponownego wczytywania aktywności, widoki po prostu się przesuwają, aby wypełnić pozostałą przestrzeń.
Jeśli jednak z jakiegoś powodu użyjesz innego układu, gdy urządzenie jest ustawione poziomo, fakt, że Android ponownie ładuje Twoją aktywność, jest dobry, ponieważ następnie załaduje prawidłowy układ. [Jeśli używasz nadpisywania w takim działaniu i chcesz wykonać magiczną zmianę układu w czasie wykonywania ... cóż, powodzenia - nie jest to proste]
Szybkie podsumowanie
Jeśli android:configChanges="keyboardHidden|orientation"
tak, to z niego korzystaj. Ale PROSZĘ koniecznie przetestować, co się dzieje, gdy coś się zmieni, ponieważ zmiana orientacji nie jest jedynym sposobem na uruchomienie pełnego ponownego uruchomienia działania.