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

java - RxJava的Observable订阅时如何作到在onComplete被调用时取消订阅?

厉永宁
2023-11-04

例:

table.subscribe(tableIns -> {            // System.out.println("-------Information-------");            System.out.println(tableIns);        }, throwable -> {            throw new SchemaExportException(throwable);        }, new Action() {            @Override            public void run() throws Exception {                System.out.println("Complete");                // 在这里取消订阅        });

注意:是非Android 运行环境, 使用的是RxJava2.x

共有1个答案

鞠宏恺
2023-11-04

你可以在 Actionrun 方法中取消订阅,就像这样:

Observable.create(emitter -> {    // 你的代码...}).subscribe(tableIns -> {    System.out.println(tableIns);}, throwable -> {    throw new SchemaExportException(throwable);}, () -> {    System.out.println("Complete");    emitter.unsubscribe(); // 在这里取消订阅});

这段代码中,我们使用 Observable.create 来创建一个 Observable。这个 Observable 在执行过程中会调用 emitter.onNextemitter.onErroremitter.onComplete。在 onComplete 被调用时,我们调用 emitter.unsubscribe() 来取消订阅。

注意,你需要确保 emitteronComplete 被调用时仍然可用。如果 emitteronComplete 调用之前就已经不再可用,那么你可能会遇到问题。

 类似资料:
  • 在这篇文章之后,我正在使用带有RxJava/RxKotlin Flowable的Room。我让它运行,但在带有3个片段的ViewPager中使用它存在问题。 我将向您介绍我的代码: 我有一个带有选项卡布局和三个片段(A、B和收藏夹)的视图分页器。前两个片段包含可以添加到收藏夹的数据列表。 在最喜欢的片段中,我使用Flowable来监听A和B所做的更改并相应地更新列表。但是,当一个项目在A和B中成为

  • 我是RxJava的新手。我有一个,用于下载图像URL列表并将其转换为位图的简单网络操作。 在活动的上,我取消订阅可观察到的以避免内存泄漏。 我能看到的是,如果我在图像下载过程中退出活动,后台任务也会被终止。我只想继续做背景工作,即使我已经取消了《观察家》的订阅。有可能吗?

  • 这很简单,但是如果我尝试将添加到块,我会得到一个错误,即属性'unsubscribe'在type=>observable'上不存在。我甚至考虑在后面添加,就像链接一样,但这只会使我的页面挂起。我也没有错。有人能告诉我如何最好地退订吗?是否需要将api调用分配给变量,然后在块中的可变量名称上使用.unsubscribe()

  • 我读到过,通常您不必明确地取消对或的订阅,因为: ActivatedRoute及其可观察到的内容与路由器本身绝缘。当不再需要路由组件时,路由器会销毁该组件,并且注入的ActivatedRoute也会随之死亡。 每当有人导航到另一个组件/页面时,就会被再次订阅。只有当事件是的实例时,我才必须在路由器订阅中执行此操作,因为在此之前,url参数还不可用。 我的问题是,那些订阅会发生什么?他们是自动退订还

  • 我使用SockJS和StompJS,当我在浏览器中打开我的应用程序时,有时它会在连接到websocket之前尝试订阅一些主题。我希望主题订阅等待应用程序连接到websocket。 这就是我实现此代码的原因,我将其称为: 因此,我只在连接状态为时才订阅该主题,并且只有在客户端首次成功连接时才会调用该主题。 我想稍后从主题中取消订阅,所以我需要内部订阅返回的对象,我还需要内部订阅的消息。 我所实现的很

  • 我知道当您订阅可观察时,您会收到一个必须使用Android生命周期取消订阅的订阅。因此,对于片段或活动中的订阅,我使用onDestroy()中的取消订阅。 但我的问题是,当我在没有任何生命周期的地方订阅时。例如,在SyncAdapter中。在这种情况下,我如何“自动取消订阅”以避免内存泄漏?在SyncAdapter中,有没有什么好的做法,比如说“永远不要在XXX位置订阅”,而我正在打破这种订阅?