当前位置: 首页 > 知识库问答 >
问题:

使用RxJava/RxAndroid的自定义eventbus的回退观察员?

郑帅
2023-03-14

我目前正在研究更好的方法来处理我的应用程序中的事件。目前,我有多个监听器订阅和取消订阅不同事件上的有趣对象。

例如,在按钮上单击会创建一个侦听器,如果操作成功(在这种情况下它会自动注销自己)或发生非致命错误(在这种情况下它会自动重试操作),它会侦听客户端对象。

html" target="_blank">客户端对象依次启动一个android服务,该服务可以发出不同的状态事件,如果应用程序当前不可见,则会导致用户界面自我更新或显示通知。

在我的应用程序中,我有一个非常大的听众混乱,这不容易理解,也不是在所有情况下都有效。

为了解决这个问题,我想用RxJava实现一个事件总线,希望能降低我的应用程序的复杂性。

问题:
如果没有其他观察者可用,RxJava是否有可能为可观察的对象提供回退观察者以对事件做出反应?

E、 g.所有活动/片段都注册自己,以了解特定事件,以便在必要时更新UI。创建/销毁活动/片段时,它会自动从事件总线注册/注销自身。

如果应用程序现在处于后台,则不应该再注册任何观察者。在这种情况下,只有我想使用处理这些事件的后备观察者。

我希望实现以下目标:
如果在前台:在事件上,更新UI
如果在后台:在事件上,显示toast/notification。

共有1个答案

姬俊能
2023-03-14

在我看来,您的应用程序在后台时不应该显示任何内容(用户不再对它感兴趣,或者正在做其他事情,所以不要用祝酒词向他发送垃圾邮件(因为他可能甚至不知道哪个应用程序提出了这个祝酒词))。

然而

您可以使用主题解决这个问题。假设您有MyServiceErrorHandler类和Publish科目

您可以稍微扩展一下这种方法,并使用一个行为主题,它将为每个订阅者重播它的最后一个事件(在屏幕旋转的情况下非常方便)。因此,即使没有订阅者,您也将事件发布到此主题,当用户再次打开此应用程序时(您的一个UI元素将订阅),它将收到最后一个错误事件(以便您可以正确显示)。但在这种解决方案中,如果出现过时/已经使用的错误(防止每次旋转时都显示错误),您需要更多的逻辑来清除这个主题。

 类似资料:
  • 我正在学习RxJava/Android(我目前正在将其与网络呼叫改造相结合),现在我有一个问题,假设我有6个不同的可观察对象,如下所示:<代码>可观察 apiInterface等为改造客户端,GetClient等为调用 现在,我如何异步执行这6个不同的调用,以及当所有6个调用都完成时-

  • 我只是从改型和RXJava开始。我有一个api调用,它上传一个文件并返回一个http响应,该响应的主体为空,状态为200(以防everythign工作正常)。我把它翻译成: 第二步,在我弄清楚如何映射到改型的请求是链多文件上传。我该怎么做? 也欢迎链接到使用RXJava+Retrifit的高级教程或示例。

  • 我在创建一个将返回对象列表的可观察对象时遇到了麻烦。我有一个ID列表,想对我的数据库提出一个请求。在这种情况下,我使用的是Firebase。当得到一个结果时,我希望将这些对象中的每一个编译成一个列表,然后返回该列表。我需要在返回之前等待所有的对象都返回。我在我的视图模型反序列化器类中这样做。这是我的代码。 有几种方法可以从firebase数据库中返回数据,我可以返回Documentsnapshot

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 问题内容: 我使用侦听器作为回调来观察Android的异步操作,但是我认为用RxJava替换此侦听器可能很棒,我是使用此库的新手,但是我真的很喜欢它,并且我始终将其与Android项目一起使用。 这是我的重构代码: 一个简单的回调: 和“观察者”: 谢谢! 问题答案: 例如,您可以使用 Observable.fromCallable 来创建可观察数据。 然后使用您的数据 使用了rxjava 1.x

  • 在android 6.0.1 Samsung s6 Edge+上的测试 当device screen脱机并从debug中拔出时,可观察到的只是停止发射项目。如果设备打开,则开始发射对象。另一个问题是,在停止接收项目之前,我会按照相同项目的顺序随机地得到2/3个重复调用 ____________________________edit_________________________________