我正在看这个演讲,在13:42他们说在路上使用lambda:
api.getEvents()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(() -> loadingIndication.show())
.doOnUnsubscribe(() -> loadingIndication.hide())
.subscribe(...);
导致View泄露。
在这种情况下,你能解释一下泄漏是如何起作用的吗?是否出现泄漏取决于我们如何编译代码以及我们将RxJava代码放在哪个类中(例如,在Activity中,在Application中,在Service中)?
答案 0 :(得分:1)
这导致泄漏,因为lambdas与匿名内部类没有什么不同,在匿名内部类中,lambdas将隐藏引用它们被调用的当前类,在本例中是Activity。所以这段代码实际上引用了你的Activity。
api.getEvents()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(() -> loadingIndication.show())
.doOnUnsubscribe(() -> loadingIndication.hide())
.subscribe(events -> {}, throwable -> {});
我没有时间检查视频,但有一种方法可以使用CompositeDisposable并通过{{添加上述代码返回的Disposable
来处理此类可能的内存泄漏1}}并在您的活动compositeDisposable.add()
上调用compositeDisposable.clear()
。