在实施 MVP 时,将演示者保留在 Android 中的最佳做法是什么?

What are the best practices to preserve Presenters in Android when implementing MVP?

你是怎么做到的?配置更改时如何保留 Presenter?

另一个问题:离开 Fragment/Activity 时是否可以保留演示者?

我不介意使用诸如 Mosby 或 Nucleus 之类的 MVP 框架,但我认为 Mosby 的方法并不是最佳方法。根据 SO 上的许多帖子,不应在带有 UI 的片段中使用 Fragment.setRetainInstance(true),也不应将其与 backstack 一起使用。也许有更好的方法?

Nucleus 内部使用静态地图。实际上 Nucleus 做的更多的是从 Presenter 执行的 Request (rxjava) 到 Presenter 实例的映射。这意味着 nucleus 没有保留 Presenter 实例,而是保留 Request (RxJava) 并将其重新附加到新的 Presenter 实例。

Mosby 2.0 使用保留 Fragments 或活动 lastNonConfiguration 方法来保留演示者。保留 UI 的片段没有错。保留片段的唯一缺点是您不能将它们放在后端堆栈中。 在 Mosby 3.0 中(SNAPSHOT 可用但 Fragment on backstack 尚未实现)所有演示者都将保存在绑定到托管活动生命周期的 Map 中。这意味着,Presenter 可以保留在 backstack 上用于非重新训练片段。与 Nucleus 相比,它们仅在 Activities 生命周期内保留或由用户从后台堆栈中删除(导航)。此外,这允许 Mosby 3.0 也支持自定义视图(FrameLayout 等)。

is it possible to preserve Presenters when navigating away from Fragment/Activity?

是的,但为什么需要您这样做?如果视图根本不可见,是否真的需要保留演示者?尽管如此,Nucleus 和 Mosby 都可以做到这一点。