【问题标题】:How to handle rotation with Retrofit and RxJava/RxAndroid in Activity?如何在 Activity 中使用 Retrofit 和 RxJava/RxAndroid 处理旋转?
【发布时间】:2015-11-21 11:38:11
【问题描述】:

我读到here 说我们可以使用一些全局缓存来处理旋转。

您可以通过使用缓存或重放 Observable 运算符来防止这种情况,同时确保 Observable 在 Activity 生命周期中以某种方式存活(例如,通过将其存储在全局缓存中、片段中等)

但是如何实现呢?有人可以给我举个例子怎么做? 或者您知道一些更好的方法来处理配置更改?

编辑:

目前我找到了很多方法,但最终还是使用了 RxBus 实现。使用 RxBus 的好例子,你可以找到 here

【问题讨论】:

    标签: android rotation retrofit rx-java rx-android


    【解决方案1】:

    我制作了一个演示应用程序 (https://github.com/pmellaaho/RxApp) 来试验如何处理 Android 应用程序中的各种情况。简而言之,我使用来自 Activity 的单例模型来获取来自网络的响应。这使得缓存响应、访问来自多个 UI 组件的数据、订阅挂起的请求以及为自动化 UI 测试提供模拟数据成为可能。

    【讨论】:

    • 感谢您的演示应用程序!但我认为我们应该使用 RxLifecycle 库来在我们提出请求时处理轮换。看看 RxAndroid 的变化和稳定版github.com/ReactiveX/RxAndroid/blob/…
    • 我对 RxLifecycle 没有第一手经验,但我认为它可以为您处理基于生命周期事件的自动取消订阅。您仍然需要自己处理订阅挂起的请求/获取缓存数据。如有错误请指正
    • 我认为你是对的,但我还没有实现 RxLifecycle,所以现在不能纠正你。希望已经用过 RxLifecycle 和 RxBinding 的大神指正。
    • 对不起,我错了 RxLifecycle,它只能处理自动取消订阅以防止内存泄漏而不处理轮换。这是我的误解。再次感谢您的示例!
    • 在方向更改时,您希望保留请求并交付给新活动。在实际活动销毁时,您希望终止请求并丢弃结果。有人有解决办法吗?
    【解决方案2】:

    我最近将 Loader 与 ConnectableObservable 结合使用,以在 RxJava2 流期间处理更好的旋转。我什至创建了一个Medium Post,详细解释了我的方法。

    基本上,您必须将 observable (ConnectableObservable) 放入带有 TransformerLoader 中,然后在下次重新订阅它时活动/片段被销毁后恢复。

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2020-01-02
      • 2016-08-29
      • 1970-01-01
      • 2017-10-13
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      相关资源
      最近更新 更多