łatwe zapisywanie i przywracanie stanu instancji!
jako początkujący tworzący proste aplikacje, możesz zauważyć podczas testowania, że obrót ekranu resetuje wszystkie dane zebrane od użytkownika. Obrót ekranu jest jedną z wielu zmian w cyklu życia Androida, które mogą zniszczyć i odtworzyć aktywność i spowodować utratę wszystkich danych! Niezbyt dobre wrażenia użytkownika.
aby przygotować aplikację na te zmiany w cyklu życia aktywności, istnieją dwie metody, które możesz dodać do głównej aktywności, aby zapisać i przywrócić dane:
- onSaveInstanceState()
- onRestoreInstanceState()
metoda onSaveInstanceState () umożliwia dodanie par klucz / wartość do stanu zewnętrznego aplikacji. Następnie metoda onrestoreinstancestate() pozwoli Ci pobrać wartość i ustawić ją z powrotem na zmienną, z której została pierwotnie pobrana.
aby przygotować aplikację do ich użycia, ważne jest, aby utworzyć zmienne instancji dla wszystkich danych, które będą musiały zostać zachowane, gdy stan aplikacji spowoduje zniszczenie aktywności. Zmienne te są poza żadnymi metodami i dostępne z dowolnego miejsca w klasie.
będziesz również chciał zidentyfikować widoki, które wyświetlają te dane użytkownikowi i wskazać, że chcesz, aby dane były nadal wyświetlane tutaj, gdy aktywność zostanie przywrócona za pomocą atrybutu:
android:freezesText="true"
onSaveInstanceState ():
ta metoda jest wywoływana przed OnStop () w starszych wersjach Androida i może być wywoływana po OnStop () w nowszych wersjach.
1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }
rozbijmy tą metodę:
- nadpisanie w pierwszej linii oznacza, że zamierzasz nadpisać domyślną deklarację metody.
- sygnatura metody w drugiej linii zaczyna się od modyfikatora dostępu „protected”, co oznacza, że metoda może być dostępna tylko w obrębie samej klasy, pakietu lub podklasy. Zwracanym typem dla tej metody jest „void”, ponieważ nie zwraca ona żadnych danych. Parametr, który przyjmuje ta metoda, to obiekt typu Bundle o nazwie outState.
- ponieważ nadpisujemy tę domyślną metodę, musimy użyć super (on line three) do przechowywania wszystkich domyślnych danych outState.
- na czwartej linii możesz zacząć przechowywać własne dane. funkcja onsavedinstancestate () jest wywoływana przy użyciu notacji kropkowej na outState aplikacji. Pierwszy argument jest dowolnym łańcuchem znaków i jest używany jako klucz (podobny do ustawienia zmiennej), aby uzyskać dostęp do wartości przechowywanej w drugim argumencie. Tutaj dostarczyliśmy zmienną instancji, która przechowuje wartość całkowitą. Zauważ, że linia piąta jest bardzo podobna z tym wyjątkiem, że zmienna typu String jest zapisywana w outState.
onRestoreInstanceState():
ta metoda jest wywoływana po onStart().
1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }
rozbijmy tą metodę:
- nadpisanie w pierwszej linii oznacza, że zamierzasz nadpisać domyślną deklarację metody.
- podpis metody w drugiej linii rozpoczyna się od modyfikatora dostępu „protected”, co oznacza, że dostęp do metody można uzyskać tylko w obrębie samej klasy, pakietu lub podklasy. Zwracanym typem dla tej metody jest „void”, ponieważ nie zwraca ona żadnych danych. Parametr, który przyjmuje ta metoda, to obiekt typu Bundle o nazwie savedInstanceState.
- ponieważ nadpisujemy tę domyślną metodę, musimy użyć super, on line three, aby przywrócić wszystkie domyślne dane savedInstanceState.
- ponieważ przechowujesz odpowiednie dane aplikacji w zmiennych instancji, ustawiasz dane zapisane w outState z powrotem na zmienną, wywołując metodę get w savedInstanceState przy użyciu notacji kropkowej i dostarczasz klucz Łańcuchowy używany do przechowywania danych jako argument.
mam nadzieję, że to Wyjaśnienie pomoże Ci lepiej zrozumieć te metody i jak z nich korzystać. Więcej informacji można znaleźć w dokumentacji aktywności dla systemu Android.
Szczęśliwego Kodowania!