如何在Activity中使用Retrofit和RxJava/RxAndroid处理旋转?

29
我看到这里的文章提到,我们可以使用一些全局缓存来处理旋转。

您可以使用缓存或重放Observable操作符来防止此问题,同时确保Observable以某种方式在Activity生命周期中幸存下来(例如,将其存储在全局缓存中,在Fragment中等)

但是如何实现呢?有人可以指导我如何做吗? 或者你知道一些更好的处理配置更改的方法吗?
编辑:
目前我找到了很多方法,但最终选择使用RxBus实现。你可以在这里找到使用RxBus的好例子。
2个回答

5

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


2
感谢您的演示应用程序!但我认为我们应该使用RxLifecycle库来处理旋转,同时进行请求。请查看RxAndroid更改和稳定版本 https://github.com/ReactiveX/RxAndroid/blob/80393be5a835374bf9614e89f0629d5650fcdf92/CHANGES.md - DeniSHow
1
我对RxLifecycle没有第一手的经验,但我认为它可以根据生命周期事件自动取消订阅。但你仍然需要自己处理订阅待处理请求/获取缓存数据的问题。如果我有误,请纠正我。 - pmellaaho
我认为你是对的,但我还没有实现RxLifecycle,所以现在无法纠正你。我希望已经使用过RxLifecycle和RxBinding的人可以纠正我们。 - DeniSHow
3
抱歉,我之前对 RxLifecycle 的理解有误,它只能处理自动取消订阅以避免内存泄漏,而不能处理旋转。这是我的误解。再次感谢您的示例! - DeniSHow
1
当屏幕方向改变时,您希望保留请求并传递给新的活动。在实际活动销毁时,您希望终止请求并丢弃结果。有人有解决方案吗? - Greg Ennis
显示剩余4条评论

0

我最近使用了Loader结合ConnectableObservable来更好地处理RxJava2流中的旋转。 我甚至创建了一篇Medium文章,详细解释了我的方法。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接