可观测对象是否自动释放RxAndroid
我有一个函数可以创建可观察的:可观测对象是否自动释放RxAndroid,android,rx-java,rx-android,Android,Rx Java,Rx Android,我有一个函数可以创建可观察的: void getData() { Observable.create(emitter -> { // call webservice ....... emitter.onNext(myData); }).subscribe(data -> { // Process data here }); } 我不想在这里用一次性的。我认为可观察的是局部变量,所以它将在函数完成后释放。 调用getD
void getData() {
Observable.create(emitter -> {
// call webservice
.......
emitter.onNext(myData);
}).subscribe(data -> {
// Process data here
});
}
我不想在这里用一次性的。我认为可观察的是局部变量,所以它将在函数完成后释放。
调用getData()函数后,可观察对象是否自动释放?
可观察对象
不自行处置
这是一个很好的做法来处理您的可观察到的,以避免内存泄漏和应用程序崩溃
您可以使用disposable.dispose()
或compositesubscription.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
Observable将自动处理它们调用的
onComplete()
或onError()
例如:您有一种方法可以从10个文件Observable loadFiles()
中精确加载数据,这些文件返回Observable.create()
。然后,每当您想要发出值时,您调用e.onNext()
,计数10次后,您将调用e.onComplete()
,以标记您的可观察对象已完成其工作,然后它将自动处理
您只需要调用dispose()
方法来指示订阅者对其当前订阅的任何观察对象不再感兴趣。然后,这些观察者(如果他们没有其他感兴趣的观察者)可以选择停止生成要发射的新项目
当活动停止时调用
dispose()
,以确保在此之后不再排放。因此,这是一个很好的做法,因为它可以防止内存泄漏和资源浪费、网络呼叫。谢谢您的评论。但是如果我们不使用forever循环,那么在emitter.onNext()函数之后是否会释放observable?我刚才使用了forever循环和Thread.sleep()
来模拟一个昂贵的调用。它在我退出应用程序后仍在运行。