use*_*121 3 android rx-java rx-android rx-java2
我使用 .just() 运算符编写了一个 Observable ,如下代码所示。我要做的是向操作员添加延迟,以便在将整数值发送给观察者之前,它应该延迟几秒钟
就像是:
mAsyncObservable = rx.Observable.create(new rx.Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integr> subscriber) {
SystemClock.sleep(3000);
subscriber.onNext(10);
subscriber.onCompleted();
}
});
Run Code Online (Sandbox Code Playgroud)
如何使用 .just() 运算符转换相同的代码?
代码:
Subscriber<Integer> integerSubscriber = new Subscriber<Integer>() {
private final String SubscriberTag = "integerSubscriber";
@Override
public void onStart() {
super.onStart();
Log.w(TAG, "onStart->" + SubscriberTag);
}
@Override
public void onCompleted() {
Log.w(TAG, "onCompleted->" + SubscriberTag);
}
@Override
public void onError(Throwable e) {
Log.w(TAG, "onError->" + SubscriberTag + e.getMessage().toString());
}
@Override
public void onNext(Integer i) {
Log.w(TAG, "onNext->" + SubscriberTag + "after processing " + i);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rx.Observable<Integer> integerObservable = rx.Observable.just(10);
integerObservable.subscribe(integerSubscriber);
}
Run Code Online (Sandbox Code Playgroud)
你可以使用它:
Observable.just("Some").delay(1, TimeUnit.SECOND);
Run Code Online (Sandbox Code Playgroud)
但是请记住,这delay()会将 Observable 的执行移动到另一个线程,因此如果您想在延迟后执行一些 UI 更改,则应调用以下代码:
Observable.just("Some").delay(1, TimeUnit.SECOND).observeOn(AndroidSchedulers.mainThread());
Run Code Online (Sandbox Code Playgroud)
编辑
正如@PPartisan 所说,您还可以通过将调度程序作为第三个参数传递给 来指定调度程序delay:
Observable.just("Some").delay(1, TimeUnit.SECOND, AndroidSchedulers.mainThread());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1033 次 |
| 最近记录: |