Sobes.tech
Назад к вопросам
Junior — Middle
65

Как сохранить и восстановить компоненты MVP и Dagger 2 при изменении ориентации экрана без их полного пересоздания при перезапуске Activity?

Компании, где спрашивали
ЯндексЯндекс

Ответ от нейросети

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 для инъекций
    }
}

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