在我的应用程序中,一些活动从服务器获取信息,我需要确保在尝试检索数据之前已建立连接.我正在使用BehaviorSubject在建立连接时通知订阅者,因此Activity可以加载数据.
问题是同一个流中的多个活动具有相同的行为.在我们的API中,我们必须在onStart()中调用connect()并在onStop中调用disconnect(),但如果用户使用另一个也使用连接的Activity,则无需重新创建连接,我们可以使用相同的连接.
目前,我正在以下列方式实施:
>当你调用connect()时,它返回一个将从调用类订阅的BehaviorSubject
>在方法disconnect()上,只有在BehaviorSubject中没有观察者时才会断开连接,表明没有活动正在等待响应.
>调用类必须在调用disconnect()之前释放Observable,否则方法hasObservers()将永远不会返回false
@CheckResult@OverrIDepublic BehaviorSubject<Boolean> connect() { if (!connectionManager.isConnected()) { connectionManager.connect(TIMEOUT); } return mSubject;}@OverrIDepublic voID disconnect() { if (connectionManager.isConnected() && !mSubject.hasObservers()){ connectionManager.disconnect(); }}
在我之前的实现中,我使用了侦听器来实现这一点.每次调用connect()时,它都必须接收侦听器作为参数,该参数将添加到侦听器数组中,稍后在建立连接时逐个通知.
每次调用disconnect()时,它也必须接收侦听器作为要从列表中删除的参数.仅当侦听器数组为空时才会调用connectionManager.disconnect(),表示没有活动正在等待响应.
有没有更好的方法来处理这个?
解决方法:
在您创建主题的位置,您可以指定当有人订阅/取消订阅时需要执行的 *** 作:
subject.doOnUnsubscribe(()-> { if(!subject.hasObservers()) { closeConnection(); }});subject.doOnSubscribe(() -> { openConnectionIfNotopen();});
这样,你可以摆脱disconnect()调用,你只需要取消订阅
总结以上是内存溢出为你收集整理的android – 如何使用Rx管理多个观察者,以便只保持一个服务的开放连接?全部内容,希望文章能够帮你解决android – 如何使用Rx管理多个观察者,以便只保持一个服务的开放连接?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)