我使用RxJava和RxAndroid。如果发生配置更改(活动轮换、语言区域更改等),如何恢复可观察对象的工作?
我不仅需要恢复 observable 的工作,还需要保存已发出的项目,当订阅者取消订阅并在订阅后立即发出所有已保存的项目。
我阅读了大量文章,但我没有找到问题的答案。
我找到了几个例子,但没有一个不能解决问题:
您可以使用其中一种ConnectableObservables
。特别是,cache
或者replay
对于这种情况会很方便。
例如,您可以在活动被销毁时调用cache
您的可观察对象,unsubscribe
并在活动被重新创建后重新订阅它。
我制作了一个演示应用程序 ( https://github.com/pmellaaho/RxApp ) 以试验如何处理这些情况。基本上,我使用来自 Activity 的单例模型来获取来自网络的响应。这使得缓存响应、访问来自多个 UI 组件的数据、订阅挂起的请求以及为自动化 UI 测试提供模拟数据成为可能。
您可以使用此库中的 OperatorFreeze 在重新创建活动时暂停 Observable。您需要将此运算符的实例传递给方法 Observable.lift()。当你使用持久的 Presenter 时,你不需要取消订阅 Observables。