是否Observable对象自动释放RxAndroid

时间:2018-02-09 03:57:08

标签: android rx-java rx-android

我有一个创建Observable的函数:

void getData() {
   Observable.create(emitter -> {
      // call webservice
      .......
      emitter.onNext(myData);
   }).subscribe(data -> {
      // Process data here
   });
}

我不想在这里使用Disposable。我认为observable是局部变量,因此它将在函数完成后释放。 在调用getData()函数后,observable是否自动释放?

2 个答案:

答案 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