我想运行一个新的线程,当用户点击按钮。在这个线程中,我在“i++”之后调用sleep(2000),并在textview中返回string(“text”+i)。我举了个例子,但不起作用:
Observable.create(new Observable.OnSubscribe<Void>() {
@Override
public void call(Subscriber<? super Void> subscriber) {
SystemClock.sleep(2000);
i++;
subscriber.onNext(null);
subscriber.onCompleted();
}
})
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
// code like text.setText("text" + i)
}
});
1条答案
按热度按时间w41d8nur1#
您使用rxjava1还是rxjava2/3?
是否要在订阅上创建新线程?如果是的话,你什么时候用
Schedulers.newThread()
而不是.subscribeOn(Schedulers.computation())
在rxjava2/3中,不允许发出nullsubscriber.onNext(null);
. 这实际上是你的问题。你想发射i++而不是null
.我宁愿这样做:
不建议在没有任何同步的情况下改变不同线程的状态,因此请使用atomicinteger。