Страницы

Поиск по вопросам

пятница, 1 марта 2019 г.

Нужно ли хранить презентер MVP?

В разных описаниях архитектуры MVP встречал разный подход к хранению\уничтожению presenter. Кто-то сериализует его, и затем в onCreate() восстанавливает. Кто-то никак не сохраняет и каждый раз в onCreate() создает новый.
Вопросы:
Зачем кто-то хранит peresenter, в нем ведь никогда не будет закешированных данных. Плюс, который я вижу, это не тратить каждый раз ресурсы на создание нового presenter в onCreate(). Но вместо этого нам придется каждый раз сериализовывать и десераилизовывать его. Оно того стоит? Зачем некоторые перед созданием presenter проверяют поле mPresenter в нашей вьюхе на null, ведь если вызывается onCreate(), то вьюхи либо не было никогда, либо она была уничтожена вместе со всеми полями и mPeresnter в любом случае будет null Зачем вызывается detachView() в onDestroy(), если после уничтожения активити ссылка на presenter перестанет существовать и GC скорее всего удалит его, вместе с ссылкой на view. Чтобы это было не скорее всего,а наверняка?
Лучшая практика - это создавать новый presenter в onCreate() или восстанавливать старый и атачить к нему новый экземпляр view?


Ответ

Часто нужно чтобы презентер жил во время процесса смены конфигурации, смены ориентации экрана, например. В этом случае какой-то длительный сетевой запрос может быть начат при одной ориентации, а закончен быть при другой или в процессе смены ориентации. В таких случаях презентеры хранят не в активти/фрагментах, но в отдельном месте, кое не зависит от жизненного цикла. Например в синглтоне, коий содержит мапу с презентерами по их ID. При таком подходе презентер создаётся если его нет в мапе, уведомляетя о прикреплении вьюхи и об откреплении оной. Так он сможет обработать ситуацию прихода данных во время "мёртвой вью" не нарвавшись на NPE и сможет продолжать работу пока пересоздаётся активити.
В любом случае подходов много на разные случаи. В каких-то случаях поворотов экрана не будет, в других же надо данные пришедшие во время поворота отобразить и используют ViewState для хранения состояния вьюхи, кое к ней применяют после её прикрепления к презентеру.

Комментариев нет:

Отправить комментарий