我有一个创建Observable的函数:
void getData() {
Observable.create(emitter -> {
// call webservice
.......
emitter.onNext(myData);
}).subscribe(data -> {
// Process data here
});
}
我不想在这里使用Disposable。我认为observable是局部变量,因此它将在函数完成后释放。 在调用getData()函数后,observable是否自动释放?
答案 0 :(得分:1)
Observable将自动处置名为onComplete()
或onError()
例如:您有一种方法可以从10个Observable<String> loadFiles()
文件中精确加载返回Observable.create()
的数据。然后,每当你想要发出价值时,你拨打e.onNext()
,在计数10次之后,你会打电话给e.onComplete()
来标记你的Observable已完成它的工作,然后它会自动处理。
您只需要在其当前订阅的任何Observable中调用dispose()
方法来指示订阅者不再感兴趣。那些Observable可以(如果他们没有其他感兴趣的观察者)选择停止生成要发出的新项目。
当活动停止时调用dispose()
以确保在此之后不再有排放。所以这是一个很好的做法,因为它可以防止内存泄漏和资源浪费,网络电话。
答案 1 :(得分:0)
Observables
不要处置他们自己。
处理您的observable以避免内存泄漏和应用程序崩溃是一种很好的做法。
您使用disposable.dispose()
或compositeSubscribtion.clear()
。
我做了一个简单的测试,在我退出应用程序后(返回btn),observable继续发出数据。
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Observable.create(emitter -> {
for (; ; ) {
emitter.onNext("data");
Thread.sleep(3000);
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).
subscribe(data -> {
Log.d(tag, (String) data);
});
}
});
输出:
onStart() is called
onResume() is called
data
data
onPause() is called
onStop() is called
data
data