美文网首页
RxJava内存泄露

RxJava内存泄露

作者: 董成鹏 | 来源:发表于2018-11-26 21:14 被阅读0次

RxJava内存泄漏

考虑下面的代码

        subscription = recommendMovieUseCase.recommendRandomMovie()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String movieTitle) {
                        view.hideProgress();
                        view.showTitle(movieTitle);
                    }
                }, new Action1<Throwable>() {
                    @Override
                    public void call(Throwable throwable) {
                        view.hideProgress();
                        view.showLoadingError();
                    }
                });

在上面的代码中, 即使我们调用了subscription.unsubscribe()方法, 还是会造成内存泄露, 这是因为我们知道内部类会隐式的持有外部类的引用, 而unsubscribe()方法, 会切断这种隐式的引用, 这在一般情况下是没有问题的.

但是上面的例子中, 内部类不仅仅持有外部类的引用, 还持有了view的引用, unsubscribe()方法是不会切断这种引用的, 所以会造成内存泄露.

那上面的问题怎么解决?

就是不用unsubscribe()方法, 使用empty()方法, 后者会把会把内部类中对于外部类成员的引用也置为空.

对于CompositeSubscription来说, 我们要调用clear方法, 这样才能切断每一个Subscription中对于外部类成员变量的引用.

相关文章

网友评论

      本文标题:RxJava内存泄露

      本文链接:https://www.haomeiwen.com/subject/zyddfqtx.html