可观测对象是否自动释放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()
来模拟一个昂贵的调用。它在我退出应用程序后仍在运行。