• Циклическая зависимость между View и Presenter
В MVP View хранит ссылку на Presenter, а Presenter ссылается на View. Это не так страшно, т.к. Presenter не знает о конкретном классе, реализующем интерфейс View, но факт остается фактом.
Из-за того, что Presenter ссылается на View, время его жизни должно не превышать время жизни View. Presenter обязан остановить все асинхронные операции, до перехода Activity или Fragment в состояние destroyed.
Это приводит нас ко второй проблеме.
• Presenter предоставляет методы для обработки жизненного цикла View
В хорошей реализации MVP Presenter не имеет методов жизненного цикла, таких как
onStart()/onStop()
. Вместо этого создаются методы типа init()
для загрузки и отображения данных и unsubscribe()
для отписки от асинхронных вызовов.При такой реализации Presenter не знает о жизненном цикле, но View должна сама заботиться о вызове этих методов. Если View не вызовет
unsubscribe()
до отработки метода onDestroy()
, то это может привести к утечке Activity.