2014-11-18 2 views
0

Я проверил документ жизненного цикла активности и согласно документу onSaveInstanceState() и onRestoreInstanceState() будет использоваться для сохранения состояния пользовательского интерфейса.Назначение onSaveInstanceState() в жизненном цикле активности

Чтобы проверить использование указанных выше способов:

Случая 1: У меня есть создать простой макет с окном редактирования и переключите кнопку, и я вошел текст в моем редактировать текстовое поле и изменил кнопку переключения на 'on', а затем изменил ориентацию активности. К моему удивлению, моя деятельность способна сохранять значения без сохранения состояния в методе onSaveInstanceState().

Дело 2: Перешел на другую деятельность и вернулся к моей деятельности, в этом случае также сохранив ее ценность.

Итак, когда активность способна сохранить свое состояние, то какая цель ниже методов.

onSaveInstanceState() 
onRestoreInstanceState() 
+0

«Супер» методы вызываются автоматически, поскольку они являются членами базового класса Activity. Вы можете переопределить их, чтобы добавить свои собственные материалы, если хотите сохранить другое состояние. Начните с вызова 'super.onSaveInstanceState(); ... мой код ...' – Simon

ответ

1

Вы можете посмотреть это видео о восстановлении - https://www.youtube.com/watch?v=ekN2zvFytZk. Но в двух словах андроид может восстановить состояние представления, пройдя все представления в иерархии и получить их значения (в вашем случае значение EditText). И одна важная вещь - взгляды должны иметь установленные идентификаторы.

Эти методы могут быть полезны, когда вы хотите хранить переменные в своей деятельности. Например, вы реализуете программу чтения книг, и вы можете сохранить выбранный пользователем view_mode (night_mode/day_mode).

1

Система имеет поведение по умолчанию; он сохраняет состояние представлений с идентификатором, эта функция не гарантируется, и в некоторых случаях вы должны переопределить этот метод и сохранить состояние своих представлений.

FROM DOC: «Реализация по умолчанию заботится о большинстве состояний пользовательского интерфейса для каждого экземпляра, вызывая onSaveInstanceState() для каждого представления в иерархии с идентификатором и сохраняя идентификатор текущего сфокусированного view (все из которых восстанавливаются по умолчанию для onRestoreInstanceState (Bundle)). Если вы переопределите этот метод для сохранения дополнительной информации, не захваченной каждым отдельным представлением, вам, скорее всего, захочется обратиться к реализации по умолчанию, иначе быть готовым к сначала сохраните все состояние каждого представления ».

2

Наиболее распространенное использование этих функций заключается в том, что ваше приложение в фоновом режиме отключено ОС Android для выделения пространства памяти для других приложений.

Когда пользователь возвращается к вашему приложению, вам нужно будет восстановить последние отображаемые виды/значения для пользователя. Это делается через onSaveInstanceState & onRestoreInstanceState.

@Override 
public void onSaveInstanceState(Bundle outState) 
{ 
    // TODO Auto-generated method stub 
    super.onSaveInstanceState(outState); 

    // Save the values in a bundle which you would like to restore 
    outState.putString("vals", val1); 
}; 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) 
{ 
    // TODO Auto-generated method stub 
    super.onRestoreInstanceState(savedInstanceState); 

    // restore your values here 
    val1 = savedInstanceState.getString("vals"); 
} 
Смежные вопросы