Back to questions
Яндекс
Junior — Middle
66
Как сохранить и восстановить компоненты MVP и Dagger 2 при изменении ориентации экрана без их полного пересоздания при перезапуске Activity?
Companies where asked
Answer from AI
sobes.tech AI
Чтобы сохранить и восстановить компоненты MVP и Dagger 2 при изменении ориентации экрана без их полного пересоздания, обычно используют сохранение компонентов в объекте, который переживает пересоздание Activity, например, в ViewModel или в Fragment с setRetainInstance(true) (хотя последний способ устарел).
Основные подходы:
-
Использование ViewModel:
- Создайте компонент Dagger в
ViewModel, который живет дольше Activity и переживает поворот. - В Activity получайте компонент из ViewModel, чтобы не пересоздавать его.
- Создайте компонент Dagger в
-
Использование Singleton-подхода с ключами:
- Создайте карту компонентов в статическом поле или в Application.
- При создании Activity генерируйте уникальный ключ (например, UUID) и сохраняйте его в
onSaveInstanceState. - При пересоздании Activity извлекайте ключ и получайте компонент из карты.
-
Использование Fragment с
setRetainInstance(true):- Создайте невидимый Fragment, который хранит компонент.
- Фрагмент не пересоздается при повороте, поэтому компонент сохраняется.
Пример с ViewModel:
class MyViewModel : ViewModel() {
val component: MyComponent = DaggerMyComponent.create()
}
class MyActivity : AppCompatActivity() {
private lateinit var component: MyComponent
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
component = viewModel.component
// Используйте component для инъекций
}
}
Такой подход позволяет избежать пересоздания компонентов при изменении конфигурации и сохраняет состояние зависимостей.