Junior — Middle
95
Hoe sla je MVP- en Dagger 2-componenten op en herstel je ze bij het wijzigen van de schermoriëntatie zonder ze volledig opnieuw te maken bij het herstarten van de Activity?
Bedrijven waar gevraagd werd
Antwoord van 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 для инъекций
}
}
Такой подход позволяет избежать пересоздания компонентов при изменении конфигурации и сохраняет состояние зависимостей.