H.N*_*yen 5 android memory-leaks rx-java
我正在玩rxjava并发现如果在销毁活动之前未完成订阅,则存在内存泄漏的风险,因为"observables保留对上下文的引用".如果订阅未在onDestroyed上取消订阅,则此类案例的演示之一如下所示(来源:https://github.com/dlew/android-subscription-leaks/blob/master/app/src/main/java/ net/danlew/rxsubscriptions/LeakingActivity.java):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leaking);
// This is a hot Observable that never ends;
// thus LeakingActivity can never be reclaimed
mSubscription = Observable.interval(1, TimeUnit.SECONDS)
.subscribe(new Action1<Long>() {
@Override public void call(Long aLong) {
Timber.d("LeakingActivity received: " + aLong);
}
});
}
Run Code Online (Sandbox Code Playgroud)
但是我不确定为什么会出现这种泄漏.我已经检查了Observable类,并且没有看到与Context相关的内容.所以我能想到的是因为在subscribe方法中定义了一个匿名的Action1类,它包含对活动实例的引用.而观察者反过来也提到了行动.我对吗?
谢谢
创建.subscribe(new Action1<Long>() { })
并存储嵌套类,该类与任何非静态嵌套类一样都引用包含类实例 - 在本例中为Activity
.
要解决这个问题,您可以Subscription.unsubscribe
在mSubscription
Activity.onDestroy
归档时间: |
|
查看次数: |
3132 次 |
最近记录: |