我的问题可以是如何使用RxJava 2的CompositeDisposable的副本?但要求澄清一个疑问.根据接受的答案
// Using clear will clear all, but can accept new disposable
disposables.clear();
// Using dispose will clear all and set isDisposed = true, so it will not accept any new disposable
disposables.dispose();
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我使用片段作为我的视图(在MVP中查看图层),在某些情况下,我将活动片段添加到backstack,实际上不会杀死Fragment但只会查看其视图.这意味着只onDestroyView调用而不是调用onDestroy.后来我可以回到后台堆叠的同一个片段,所以只有它的视图才被重新创建.我有一个CompositeDisposable作为我的成员BaseFragment持有订阅.
我的问题是,我应该叫clear上CompositeDisposable每个时间onDestroyView?一旦视图恢复,它可以再次获取订阅吗?并调用dispose的onDestroy时候片段本身被破坏没有必要采取一次性用品了,所以呢?
如果错了,处理的正确方法是什么.当clear和dispose具有被称为?
Jan*_*ans 10
你是对的,CompositeDisposable每次创建相应的视图时,你都可以避免创建一个新的,而是将一个CompositeDisposable实例视为与onCreate/onDestroy生命周期方法绑定的单个实例,并将聚合的一次性用作片段视图调用clear的一部分onDestroyView.
Disposable.dispose()您可以更好地使用而不是使用 Composite ,CompositeDisposable.clear()这样您就不必创建新的 CompositeDisposable:方法文档。
clear() //Atomically clears the container, then disposes all the previously contained Disposables.
dispose() //Dispose the resource, the operation should be idempotent.
Run Code Online (Sandbox Code Playgroud)
private final CompositeDisposable disposables = new CompositeDisposable();
// adding an Observable to the disposable
disposables.add(sampleObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<String>() {
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String value) {
}
}));
static Observable<String> sampleObservable() {
return Observable.defer(new Callable<ObservableSource<? extends String>>() {
@Override
public ObservableSource<? extends String> call() throws Exception {
// Do some long running operation
SystemClock.sleep(2000);
return Observable.just("one", "two", "three", "four", "five");
}
});
}
// Using clear will clear all, but can accept new disposable
disposables.clear();
// Using dispose will clear all and set isDisposed = true, so it will not accept any new disposable
disposables.dispose();
Run Code Online (Sandbox Code Playgroud)
我创建了一个示例项目来演示 RxJava2 的使用。在这里你可以找到示例项目 - RxJava2-Android-Samples
| 归档时间: |
|
| 查看次数: |
10196 次 |
| 最近记录: |