gpt4 book ai didi

android - 带有 Presenter 的 RxJava 和用于配置更改的保留 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:21 24 4
gpt4 key购买 nike

我是 RxJava 的新手,并且将它与 MVP 架构一起使用。

我找到了一些关于使用保留 fragment 在配置更改时保存可观察对象的示例(仍然不确定这是否是最好的方法)。不过,我发现的示例是直接在 Activity 或 Fragment 上处理 observable,而不是来自 Presenter。

所以我试验并设置了这个 quick example (仅使用 Reactivex 的 RxJava 和 RxAndroid 库)只是为了测试,这似乎工作正常。这个例子所做的是:

  1. 使用 headless 保留 fragment 启动 Activity 。
  2. 按钮
  3. Presenter 为延迟(5 秒)响应可观察调用 FakeService。
  4. Presenter 对此 observable 执行 .cache()。
  5. Presenter 告诉 View 保留这个 observable。
  6. View 将 observable 保存在保留的 fragment 中。
  7. Presenter 订阅了 observable。
  8. 用户进行配置更改(设备轮换)。用户可以根据需要多次执行此操作。
  9. OnPause 告诉 Presenter 的 CompositeSubscription 清除和取消订阅所有当前订阅。
  10. Activity 被重新创建并重复使用现有的保留 fragment 。
  11. Activity 的 onResume 检查保留 fragment 的存储 observable 是否为 null。
  12. 如果不为 null,则告诉 Presenter 订阅它。
  13. 保留的可观察对象被订阅,并且由于调用了 .cache,它只是将结果重播给新订阅者而无需再次调用该服务。
  14. 当 Presenter 向 View 显示最终结果时,它还会将保留 fragment 的已保存可观察对象设置为 null。

我想知道我这样做是否正确,以及当 Observable 的订阅在 Presenter 中处理时,是否有更有效或更优雅的方式来处理配置更改?


编辑:感谢您的反馈。基于此,我得出了我认为更简洁的解决方案,并且我已经用这些更改更新了我的链接示例。

有了新的变化;我没有将 Observable 从 Presenter 传递到 Activity 再到要存储的 retainedFragment 以防发生 configurationChange 事件,而是在创建 Presenter 时将 retainedFragment 设置为第二个“ View ”。

这样当 onResume() 在设备旋转后发生时,我不需要让 Activity 执行将 Observable 从 retainedFragment 传回 Presenter 的丑陋管道。

Presenter 可以直接与第二个“ View ”交互并检查保留的 observable 本身并在需要时重新订阅。主 Activity 不再需要知道这个 observable。突然间,它是一个简单得多的 View 层。

最佳答案

看起来不错,你可以看到那个例子 - https://github.com/krpiotrek/RetainFragmentSample

关于android - 带有 Presenter 的 RxJava 和用于配置更改的保留 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37533196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com