Edw*_*oli 2 android rx-android rx-java2
我使用该Observable.fromCallable方法创建了一个Observable,并订阅了它,如下面的代码片段所示。
Observable<String> stringObservable = Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return Thread.currentThread().getName();
}
});
stringObservable.subscribeOn(Schedulers.io());
stringObservable.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String aDouble) {
Toast.makeText(SimpleActivity.this, "onNext: " + aDouble,
Toast.LENGTH_LONG).show();
}
@Override
public void onError(Throwable e) {
new AlertDialog.Builder(SimpleActivity.this)
.setTitle("Error")
.setMessage(e.toString())
.show();
}
@Override
public void onComplete() {
}
});
Run Code Online (Sandbox Code Playgroud)
上面的片段产生了一个祝酒词,表明Callable在主线程而不是Schedulers.io线程上运行。发生了什么?
小智 5
Observable上的每个操作都会创建一个新实例,而不会影响原始实例。因此
stringObservable.subscribeOn(Schedulers.io());
Run Code Online (Sandbox Code Playgroud)
不会影响下面的代码。
使用它们的正确方法是在链中而不是使用变量。
Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return Thread.currentThread().getName();
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String aDouble) {
Toast.makeText(SimpleActivity.this, "onNext: " + aDouble,
Toast.LENGTH_LONG).show();
}
@Override
public void onError(Throwable e) {
new AlertDialog.Builder(SimpleActivity.this)
.setTitle("Error")
.setMessage(e.toString())
.show();
}
@Override
public void onComplete() {
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2177 次 |
| 最近记录: |