Почему Presenter не пересоздается вместе с Activity

165
09 января 2018, 14:07

Не могу понять как работает MvpPresenter. Почему когда Activity пересоздается, то MvpPresenter все еще живет. Что из себя представляет MvpPresenter?

Потому что MvpPresenter использует SingleTone?

Answer 1

Ваша активити наследуется от MvpAppCompatActivity(), так вот если посмотреть у нее метод onDestroy:

@Override
protected void onDestroy() {
    super.onDestroy();
    getMvpDelegate().onDestroyView();
    if (isFinishing()) {
        getMvpDelegate().onDestroy();
    }
}

То мы увидим, что метод getMvpDelegate().onDestroy() вызывается только в том случае, когда активити финиширует (спокойно переживаем методы onPause(), onStop(), onDestroy() при перевороте к примеру). Заглянем глубже, в метод getMvpDelegate().onDestroy():

/**
 * <p>Destroy presenters.</p>
 */
public void onDestroy() {
    PresentersCounter presentersCounter = MvpFacade.getInstance().getPresentersCounter();
    PresenterStore presenterStore = MvpFacade.getInstance().getPresenterStore();
    Set<MvpPresenter> allChildPresenters = presentersCounter.getAll(mDelegateTag);
    for (MvpPresenter presenter : allChildPresenters) {
        boolean isRejected = presentersCounter.rejectPresenter(presenter, mDelegateTag);
        if (isRejected && presenter.getPresenterType() != PresenterType.GLOBAL) {
            presenterStore.remove(presenter.getTag());
            presenter.onDestroy();
        }
    }
}

Авторы библиотеки отметили нам его как "убийцу презентеров" :) Первым делом "boolean isRejected = " проверяется нет ли еще ссылок на этот презентер (мб мы инжектили его в несколько вьюшек), и если вернулось true и мы не объявляли презентер глобальным синглтоном, то презентер удаляется из стора и на нем самом вызывается метод onDestroy() Надеюсь получилось объяснить хоть немножко :)

READ ALSO
Как связать таблицы между собой?

Как связать таблицы между собой?

Пишу проект для андроид устройств и появилась необходимость в использовании баз данныхИмеется бд в которой 3 таблицы:

180
Как создать Label в Android Studio &amp; libGDX

Как создать Label в Android Studio & libGDX

Сейчас пишу игруРаботаю в Android Studio

130
Подскажите метод в java android, который бы открывал и воспроизводил видеофайлы в моем плеере?

Подскажите метод в java android, который бы открывал и воспроизводил видеофайлы в моем плеере?

Здравствуйте! Я начинающий программист в области java на андроидпишу сейчас приложение на андроид - видеоплеер

200
Не запускается команда javac

Не запускается команда javac

подскажите, делаю запуск через такую запись: C:\Users\user>javac Examplejava

170