示例如下:
final Disposable disposable = Observable.create(new ObservableOnSubscribe<String>() {
public void subscribe(@NonNull ObservableEmitter<String> e) {
for (int i=0; i<100; i++) {
if (e.isDisposed())
break;
Thread.sleep(1000);
e.onNext(String.valueOf(i));
}
e.onComplete();
}
}).map(new Function<Integer, String>() {
public String apply(Integer number) {
return number.toString();
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
new Handler().postDelayed(new Runnable() {
public void run() {
disposable.dispose();
}
}, 3000);
问题:
为什么调用disposable.dispose之后,ObservableEmitter.isDisposed为true?
分析:
经过调试发现,disposable.dispose这一句执行后最终会调用ObservableCreate.CreateEmitter.dispose。
【connect】在observer.onSubscribe时连接成一条线
- Disposable是什么?
- 怎样连接起来?
- 怎样跨越线程?
- 怎样跨越操作符?
1,Disposable是一个interface
/**
* Represents a disposable resource.
*/
public interface Disposable {
/**
* Dispose the resource, the operation should be idempotent.
*/
void dispose();
/**
* Returns true if this resource has been disposed.
* @return true if this resource has been disposed
*/
boolean isDisposed();
}