android– 如何使用Rx管理多个观察者,以便只保持一个服务的开放连接?

android– 如何使用Rx管理多个观察者,以便只保持一个服务的开放连接?,第1张

概述在我的应用程序中,一些活动从服务器获取信息,我需要确保在尝试检索数据之前已建立连接.我正在使用BehaviorSubject在建立连接时通知订阅者,因此Activity可以加载数据.问题是同一个流中的多个活动具有相同的行为.在我们的API中,我们必须在onStart()中调用connect()并在onStop中调用

在我的应用程序中,一些活动从服务器获取信息,我需要确保在尝试检索数据之前已建立连接.我正在使用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管理多个观察者,以便只保持一个服务的开放连接?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1118454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存