我在 github 上 找到了一个项目,它作为 Dagger 2 的 MVP 的参考实现。所以,令我惊讶的是,Activity它在模块中有类似的方法:
@Provides
@PerActivity
MainMvpPresenter<MainMvpView> provideMainPresenter(
MainPresenter<MainMvpView> presenter) {
return presenter;
}
由于我们在以下情况下创建了活动组件OnCreate():
mActivityComponent = DaggerActivityComponent.builder()
.activityModule(new ActivityModule(this))
.applicationComponent(((MvpApp) getApplication()).getComponent())
.build();
原来,当屏幕翻转时,演示者也会死亡。毕竟,将主要活动的演示者的实例与生活联系起来更合理application吗?那么为什么presenter提供者在activity模块中呢?
原因是 Dagger 2 不用于保存 Presenter 实例(当网络请求完成并且 Presenter 必须接受响应时,需要保存实例。Presenter 不能随着活动而死)。当然,你可以
AppComponent在实例中保存presenter,但是当我们完全离开这个activity,并且已经在处理另一个activity时,我们必须销毁presenter。写主持人=空;这是额外的逻辑。看起来歪了。为了解决这个问题,使用了retain Fragments或者Moxy框架。