Что такое смена конфигурации?
Смена orientation, языка, темы, DPI, UI Mode, fontScale и др.
Android при этом может пересоздать компоненты, чтобы адаптировать UI.
Какие компоненты реагируют на смену конфигурации?
1. Activity
- По умолчанию пересоздаётся: вызывается
onPause() => onStop(), затем создаётся заново=>onDestroy()onCreate() - Получает новый
Resources.Configuration onSaveInstanceState()вызывается перед уничтожением
Основной компонент, который всегда реагирует на конфигурационные изменения, если ты явно не переопределил поведение.
2. Fragment
- Следует за
Activity: егоViewуничтожается, но самFragmentможет остаться в памяти (если находится в back stack) - Жизненный цикл: nginxКопироватьРедактировать
onPause=>onStop=>onDestroyView=>onCreateView=>onStart=>onResume
Может использовать setRetainInstance(true) (устаревший способ) или ViewModel, чтобы пережить изменения.
3. View
- Пересоздаётся заново, если
Activityпересоздана - Измеряется и пересоздаётся заново через
onMeasure()/onLayout()/onDraw() CustomViewдолжен учитывать изменение размеров, ориентации, языка и т.п.
4. ViewModel
- не пересоздаётся при смене конфигурации
- Привязан к жизненному циклу
ViewModelStoreOwner(ActivityилиFragment) - Используется для переживания конфигурационных изменений
Один из главных инструментов сохранения состояния между пересозданиями UI.
5. Service
- Не реагирует на смену конфигурации
- Живёт независимо от UI
- Даже если
Activityпересоздана,Serviceпродолжает работать
6. BroadcastReceiver, ContentProvider
- Не пересоздаются при конфигурации
- Если зарегистрированы в
Manifestи-или не зависят от UI