Какие проблемы возникают при хранении View в Presenter

«Какие проблемы возникают при хранении View в Presenter» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хранение View в Presenter приводит к утечкам памяти, так как Presenter может пережить View (например, при повороте экрана). Это нарушает принцип однонаправленности данных и усложняет тестирование.

Пример проблемы:

class MyPresenter {
    var view: MyView? = null // потенциальная утечка

    fun attachView(view: MyView) {
        this.view = view
    }
}

Решение: использовать weak references или лучше - интерфейсы с явными методами attach/detach:

class MyPresenter {
    private var viewRef: WeakReference<MyView>? = null

    fun attachView(view: MyView) {
        viewRef = WeakReference(view)
    }

    fun detachView() {
        viewRef?.clear()
        viewRef = null
    }
}

Лучшая практика - reactive подход (RxJava/Flow), где View подписывается на Presenter.