Как происходит сохранение состояния представления (view) в Android?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
При изменении конфигурации (например, поворот экрана), Android уничтожает и воссоздает активность. Состояние представления сохраняется автоматически, если у него установлен ID.
Механизмы сохранения состояния представления:
-
Автоматическое сохранение: Android запоминает определенные свойства виджетов с ID (например, текст в
TextView, checked состояние вCheckBox). -
Programmatic Save/Restore: Можно вручную сохранять и восстанавливать состояние, переопределяя методы:
// Сохранение состояния override fun onSaveInstanceState(): Parcelable? { // Сохраняем собственное состояние return super.onSaveInstanceState() }// Восстановление состояния override fun onRestoreInstanceState(savedInstanceState: Parcelable?) { super.onRestoreInstanceState(savedInstanceState) // Восстанавливаем собственное состояние }Внутри представления (классы, унаследованные от
View):// Сохранение состояния в представлении override fun onSaveInstanceState(): Parcelable { // Сохраняем собственное состояние и состояние родителя return super.onSaveInstanceState() }// Восстановление состояния в представлении override fun onRestoreInstanceState(state: Parcelable?) { // Восстанавливаем собственное состояние и состояние родителя super.onRestoreInstanceState(state) } -
Сохранение через
ViewModel: Рекомендуемый способ для сохранения данных, не связанных напрямую с UI.ViewModelпереживает изменения конфигурации. -
Сохранение через
SavedStateHandleвViewModel: Позволяет сохранять и восстанавливать небольшие объемы данных вViewModelавтоматически, используя те же механизмы, что иonSaveInstanceState.
// Пример SavedStateHandle в ViewModel
class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
private val counterKey = "counter"
var counter: Int
get() = state.get(counterKey) ?: 0
set(value) {
state.set(counterKey, value)
}
}
LocalViewStateManager: (Не является стандартным API, может быть кастомной реализацией) Для более сложного управления состоянием внутри представления.
В целом, автоматическое сохранение по ID справляется с базовыми случаями. Для сохранения более сложного состояния и бизнес-логики используются ViewModel с SavedStateHandle или ручное переопределение методов сохранения/восстановления.