- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 Android 上使用 RxJava 和 Retrofit 2.0 来处理网络请求。
当我创建可观察对象时,我将以下内容添加到它:
observable = observable
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
然后如果我添加:
observable = observable.doOnTerminate(new Action0() {
@Override
public void call() {
Log.d("OBS", "[" + Thread.currentThread().getName() + "] onTerminate");
}
});
或者类似于doOnError
和doOnCompleted
,回调在IO线程上执行,而doOnNext
在主线程上执行。
然而,我真正想要的是所有回调都转到主线程,但执行应该留在 IO 线程。
是否有一个优雅的解决方案,无需手动用 block 包装我的实现以将某些内容发布到主线程?
最佳答案
你应该将你的回调放在任何 observeOn
之前,这样它们就会留在之前的线程中:
Observable.range(1, 10)
.subscribeOn(Schedulers.io())
.doOnTerminate(() -> System.out.println(Thread.currentThread()))
.map(v -> v + 1)
.observeOn(AndroidSchedulers.mainThread())
.map(v -> Thread.currentThread() + " / " + v)
.doOnNext(v -> Log.d("OBS", v))
.subscribe();
关于android - 主线程上的 RxJava onCompleted 和 onTerminate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469394/
我正在尝试使用 SharedPreferences 保存一些变量。在我的 onCreate() 方法中,我使用 SharedPreferences 初始化我的变量,并且我希望在应用程序结束时存储这些变
我正在阅读这篇几乎解决了我的问题的帖子,因为没有人回答我的评论我决定提出一个问题: Original Post that almost answer my question 正如我在那里问的那样: 既
我有一个线程有时会由于永远不会返回的 DLL 调用而卡住(我怀疑)。在一般情况下,当您调用像 Indy 这样的阻塞例程时,是否有一种方法可以通过触发线程 OnTerminate 处理程序来从中恢复?如
我编写了一个 TThread 后代类,如果引发异常,则将异常的 Class 和 Message 保存在两个私有(private)字段中 private //... FExceptionClas
我有一个应用程序,可以启动多个线程来执行任务。我为每个线程都有一个 TThreadOnTerminate 过程,用于访问某些线程变量以使用结果填充网格。 (每个线程执行不同的任务,但答案始终相同,即成
关于 TIdThreadComponent 的非常简单但重要的问题: OnTerminate 和 OnStopped 在哪个线程中执行 - 主线程还是工作线程? 当我处于这些事件中(并调用 VCL 属
我在 Android 上使用 RxJava 和 Retrofit 2.0 来处理网络请求。 当我创建可观察对象时,我将以下内容添加到它: observable = observable .ob
来自 android.app.Application 的文档: Base class for those who need to maintain global application state.
给定这个例子,我们如何确保线程实例已被释放?当 Thread.FreeOnTerminate=true 并且您在 Thread.OnTerminate 事件中爆炸时,线程实例会发生什么情况?除非您处理
我正在使用 TThread 来填充 SQL 数据库。当这个线程结束时,必须在主窗体上启用一些对象。 我希望这段代码位于 OnTerminate() 事件中。 然而,当 Execute() 方法结束时,
我是一名优秀的程序员,十分优秀!