例:
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
你可以在 Action
的 run
方法中取消订阅,就像这样:
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.onNext
,emitter.onError
和 emitter.onComplete
。在 onComplete
被调用时,我们调用 emitter.unsubscribe()
来取消订阅。
注意,你需要确保 emitter
在 onComplete
被调用时仍然可用。如果 emitter
在 onComplete
调用之前就已经不再可用,那么你可能会遇到问题。
在这篇文章之后,我正在使用带有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位置订阅”,而我正在打破这种订阅?