7

W systemie Android, gdy zmienia się orientacja ekranu (między krajobrazem i portretem), wywoływana jest metoda onCreate, która, jeśli nie zostanie poprawnie obsłużona, odtworzy całą aktywność, gdy wynik zbyt szybko zmieni układ i zachowaj wszystkie te same informacje.Android: Efektywne obracanie ekranu Obróbka

Znam kilka sposobów rozwiązania tego problemu, ale jestem zainteresowany najbardziej efektywnym sposobem.

1) Powiedzenie manifestu, że obsłużę zmianę orientacji przez przesłonięcie metody i pozostawienie jej pustej.

2) zastąpić onSaveInstanceState() i zapisać tutaj dane, które mają być odbudowane w onCreate()

3) Przestawianie onPause() który utworzy pakiet danych i wysłać go do onSaveInstanceState()

Oczywiście, wszystkie te opcje, ale który z nich jest lepszy praktyka (małe, średnie, duże ilości danych)

Dziękuję

+1

Jednym ze sposobów jest powstrzymanie ponownego tworzenia aktywności i przełączenie pomiędzy układem pionowym i poziomym. Sprawdź moją odpowiedź [tutaj] (http://stackoverflow.com/questions/7749675/how-to-stop-changing-the-orientation-when-a-progress-bar-is-spinning-in-android/7749727#7749727) –

+0

Podczas gdy ten sposób wydaje się dobrze działać, chcę móc skorzystać z automatycznej zmiany w układach za pomocą folderu 'res/layout-land'. O ile oczywiście nie jest to zbyt duże obciążenie dla prostej czynności. – Sababado

+0

Cóż, zmieni się automatycznie jego układ, wystarczy zmienić treść w kodzie, który to robi. –

Odpowiedz

13

Niektóre konfiguracje urządzeń mogą zmienić w czasie wykonywania (np. orientacja ekranu, dostępność klawiatury i język). Po wystąpieniu takiej zmiany system Android ponownie uruchomi działanie (zostanie wywołana onDestroy(), a następnie onCreate()).

  • Aby prawidłowo obsługiwać restart, ważne jest to, że aktywność przywraca poprzedniego stanu poprzez normalnego cyklu działalności, co wymaga Android onSaveInstanceState() zanim zniszczy swoją aktywność dzięki czemu można zapisywać dane na temat aplikacji stan. Ty można następnie przywrócić stan podczas onCreate() lub onRestoreInstanceState().

Można jednak napotkać sytuację, w której ponowne uruchomienie aplikacji i przywrócenie znacznych ilości danych może być kosztowne i utrudnić korzystanie użytkownikom. W takiej sytuacji masz dwie inne opcje:

  1. Retain an object during a configuration change

    dopuścić aktywność, aby ponownie uruchomić, gdy zmiany w konfiguracji, ale niosą pełnostanowego obiekt do nowej instancji swojej działalności.

  2. Handle the configuration change yourself

    zabezpieczyć układ przed ponownym uruchomieniem działalności w pewnych zmian w konfiguracji, ale odbierać wywołania zwrotnego, gdy konfiguracje zrobić zmiany, tak, że można ręcznie zaktualizować swoją działalność jako konieczne.

Tak, jak na swoje działania danych i wybrzeżu doświadczenia użytkownika z aplikacji można wybrać to, co jest najlepsze dla ciebie ..

EDIT: jak na swoje potrzeby tylko zmienić układ myślę musisz użyć i zrobić zmiany w nim.

+0

Jak to się ma do fragmentów? –