6

Przeszedłem przez różne posty i pytania dotyczące obsługi obrotu i AsyncTask. W każdym poście wspomina się, że używanie android:configChanges jest złą praktyką. Ale nie znalazłem faktycznego powodu, dla którego jest on zniechęcony i dlaczego jest to zła praktyka. Jakie są niedogodności, jeśli używamy android:configChanges do obsługi orientacji.Dlaczego warto korzystać z Androida: configChanges to zła praktyka

Uwaga: Wiem, że jest już odpowiedź, jak radzić sobie orientację i AsyncTask. ale chcę wiedzieć, dlaczego nie używać android:configChanges.

+0

zobacz: https://github.com/open-keychain/open-keychain/issues/257 –

+1

Jednym z powodów jest to, że spowoduje to wyłączenie domyślnego zachowania Androida i naprawdę musisz zwrócić uwagę, aby zachować wszystkie ciągi w rękach niż. Lepiej więc dostosować kod do zasad ramowych, niż go zwalczać. Ale są sytuacje, w których jest to dobre i jedyne rozwiązanie, więc to nie wszystko "1 lub 0. –

Odpowiedz

4

Cóż, musisz pamiętać, że Activity może zostać ponownie uruchomiony z wielu powodów.

Na przykład jedną z tych przyczyn jest sytuacja, w której aplikacja działa w tle, a system operacyjny decyduje się ją zabić (oczywiście przy użyciu telefonu Activity), aby odzyskać pamięć.

Po powrocie do aplikacji system operacyjny spróbuje odtworzyć Twój numer Activity po jego zakończeniu, ale nie uda się tego, ponieważ zdecydowałeś, że nie będziesz się tym przejmował, po prostu użyłeś android:configChanges w swoim Manifeście.

Jeśli upewnisz się, że Twoja aplikacja może poprawnie odzyskać sprawność po ponownym uruchomieniu, android:configChanges może nie być wcale potrzebna. Z tego powodu wymaga do korzystania z android:configChanges może wskazywać na pewną wadę w aplikacji, na którą warto spojrzeć.

Nie jest źle stosować android:configChanges, ale całkiem łatwo może być, jeśli nie rozumiesz dokładnie, co robisz.

+2

Ostatnie zdanie to klucz !!! –

0

Podsumowując wszystko, co otrzymałem od odpowiedzi @ user13 i inne pytania dotyczące stackoverflow i wpisów na blogach, chciałbym podzielić się moim odkryciem, aby usunąć niektóre bardzo ważne aspekty.

  1. (user13) To nie jest złą praktyką do korzystania z Androidem: configChanges, ale to bardzo łatwo może być, jeśli nie rozumieją dokładnie, co robisz

  2. Stosując tę ​​technikę uniemożliwia łatwo korzystając z zasobów specyficznych dla konfiguracji. Na przykład, jeśli chcesz, aby układ, rysunki lub inne elementy były inne w pionie i krajobrazie, musisz zarządzać nim samodzielnie, jeśli używasz android:configChanges.

  3. trzeba nadpisać i wykorzystać metody do wykonywania określonej czynności, jeśli użytkownik zdecyduje się użyć android:configChanges
  4. Jak user13 wspomniano Aktywność odtworzył nie tylko ze względu na zmianę orientacji, ale istnieje wiele powodów, dzięki którym działalność może zostać wznowiona. W związku z tym ponowne uruchomienie działalności powinno być obsługiwane we wszystkich sprawach. użycie tylko jednego przypadku spowoduje nieobsłużone przypadki ponownego uruchomienia aktywności, co spowoduje potencjalny błąd.
  5. Istnieje wiele lepszych sposobów obsługi restartu aktywności i wiele pomocy jest również dostępnych na przepływie stacoverflow, więc android:configChanges powinno być używane w ostateczności zgodnie z dokumentacją.
0

Korzystanie z Androida: configChanges to dobra praktyka, jeśli wiesz, co robisz.

Zawsze należy sprawdzić, jak aplikacja zachowuje się po ponownym uruchomieniu przez system, aby zachować wygodę dla użytkownika, aby można było zachować pewien stan przez cały czas, ale nie wszystkie. ze zmianami konfiguracyjne, takie jak ten:

android:configChanges="locale|keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

Aplikacja będzie ponownie uruchomić raczej rzadko na nowych urządzeniach, które mają dużo pamięci. Jeśli zrestartuje się, nie będzie tak niespodziewany dla użytkownika, ponieważ użytkownik zwrócił uwagę na inne aplikacje i wrócił do aplikacji. Użytkownik nie musi być w tym samym stanie po ponownym uruchomieniu, jeśli zdarzy się to przez ręczne zabicie aplikacji lub ponowne uruchomienie aplikacji z powodu innych ciężkich zadań (gra) wykonywanych przez użytkownika, ważne jest tutaj doświadczenie użytkownika.

Jeśli potrzebujesz, aby odświeżyć listę tylko dla różnych układów na orientacje zmian lub trzeba ukryć niektóre wyświetlanie elementów można nazwać:

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    _list.reloadData(); 
    _editorButton.visible(isPortrait()); 
} 

(używam moich klas niestandardowych, ale o co chodzi)