Главная » Разработка для Android » Сохранение состояния Активности

0

Если вы хотите сохранить информацию, которая принадлежит Активности и не должна быть доступна другим компонентам  (например, переменным экземпляра класса),  вы можете вызвать  метод Activity.getPreferences() без указания названия Общих настроек.  Доступ к возвращенному ассоциативному массиву Общих настроек ограничен Активностью, из которой он был вызван. Каж- дая Активность поддерживает только один безымянный объект Общих настроек.

В листинге 6.5 показано, как использовать приватные  Общие настройки

Активности.

Листинг 6.5.

protected void saveActivityPreferences() {

// Создайте или извлеките объект настроек Активности. SharedPreferences activityPreferences = getPreferences(Activity.MODE_

PRIVATE);

// Извлеките редактор, чтобы изменить Общие настройки. SharedPreferences.Editor editor = activityPreferences.edit();

// Извлеките Представление.

TextView myTextView = (TextView)findViewById(R.id.myTextView);

// Запишите новые значения примитивных типов в объект Общих настроек. editor.putString("currentTextValue", myTextView.getText().toString());

// Сохраните изменения. editor.commit();

}

Сохранение и восстановление состояния экземпляра класса

Android  предлагает  специальный тип Общих настроек для сохранения переменных экземпляра Активности.

С помощью переопределения обработчика  событий  Активности onSa- veInstanceState вы можете вызвать  его параметр  Bundle  для сохранения переменных экземпляра пользовательского интерфейса. Прежде чем пере- давать измененный параметр  Bundle  в обработчик  родительского класса, как показано  в листинге  6.6, сохраните  значения  с помощью методов get и put, как и в случае с Общими настройками.

Листинг 6.6. Сохранение состояния экземпляра Активности

private static final String TEXTVIEW_STATE_KEY = "TEXTVIEW_STATE_KEY";

@Override

public void onSaveInstanceState(Bundle saveInstanceState) {

// Извлеките Представление

TextView myTextView = (TextView)findViewById(R.id.myTextView);

// Сохраните его состояние saveInstanceState.putString(TEXTVIEW_STATE_KEY, myTextView.getText().

toString());

super.onSaveInstanceState(saveInstanceState);

}

Этот обработчик будет срабатывать всякий раз, когда жизненный цикл Активности начнет подходить к концу, но только в том случае, если ее работа не будет завершена явно (при вызове метода finish). Вследствие этого об- работчик  используется для проверки  целостности состояния Активности между активными жизненными циклами  одиночной  пользовательской сессии.

Сохраненный параметр  Bundle  передается  методам onRestoreInstan- ceState  и onCreate, если приложение принудительно перезапускается на протяжении сессии. В листинге  6.7 показано, как извлечь  значения  из этого параметра и использовать их для обновления состояния экземпляра Активности.

Листинг 6.7. Восстановление состояния экземпляра Активности

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

TextView myTextView = (TextView)findViewById(R.id.myTextView); String text = "";

if (savedInstanceState != null && savedInstanceState. containsKey(TEXTVIEW_STATE_KEY))

text = savedInstanceState.getString(TEXTVIEW_STATE_KEY);

myTextView.setText(text);

}

ПРИМЕЧАНИЕ

Надо помнить, что обработчик onSaveInstanceState вызывается только тогда, когда Активность переходит в пассивное состояние, а не когда она закрывается при вызове метода finish или пользователь нажимает кнопку Назад.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии