Sobes.tech
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) (хотя последний способ устарел).

Основные подходы:

  1. Использование ViewModel:

    • Создайте компонент Dagger в ViewModel, который живет дольше Activity и переживает поворот.
    • В Activity получайте компонент из ViewModel, чтобы не пересоздавать его.
  2. Использование Singleton-подхода с ключами:

    • Создайте карту компонентов в статическом поле или в Application.
    • При создании Activity генерируйте уникальный ключ (например, UUID) и сохраняйте его в onSaveInstanceState.
    • При пересоздании Activity извлекайте ключ и получайте компонент из карты.
  3. Использование 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 для инъекций
    }
}

Такой подход позволяет избежать пересоздания компонентов при изменении конфигурации и сохраняет состояние зависимостей.