我正在使用LeakCanary 1.3.1-SNAPSHOT.我发现有关ViewTreeObserver.OnScrollChangedListener设置的泄漏,我修复了它,如下面的代码:
private ViewTreeObserver.OnScrollChangedListener scrollViewChangeListener;
@Override protected void onFinishInflate() {
super.onFinishInflate();
ButterKnife.inject(this);
scrollViewChangeListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override public void onScrollChanged() {
EventDetailsView.this.onScrollChanged(scrollView.getScrollY());
}
};
scrollView.getViewTreeObserver()
.addOnScrollChangedListener(scrollViewChangeListener);
}
@Override public void onDetachedFromWindow() {
super.onDetachedFromWindow();
scrollView.getViewTreeObserver().removeOnScrollChangedListener(scrollViewChangeListener);
}
Run Code Online (Sandbox Code Playgroud)
然而,LeakCanary仍然将其报告为泄漏,任何想法为什么?
* com.couchsurfing.mobile.ui.events.detail.EventDetailsScreen$Presenter has leaked:
* GC ROOT android.view.inputmethod.InputMethodManager$1.this$0 (anonymous class extends com.android.internal.view.IInputMethodClient$Stub)
* references android.view.inputmethod.InputMethodManager.mCurRootView
* references com.android.internal.policy.impl.PhoneWindow$DecorView.mAttachInfo
* references android.view.View$AttachInfo.mTreeObserver
* references android.view.ViewTreeObserver.mOnScrollChangedListeners
* references android.view.ViewTreeObserver$CopyOnWriteArray.mData
* references java.util.ArrayList.array
* references array java.lang.Object[].[0]
* references com.couchsurfing.mobile.ui.events.detail.EventDetailsView$1.this$0 (anonymous class implements android.view.ViewTreeObserver$OnScrollChangedListener) …Run Code Online (Sandbox Code Playgroud)