Leak - DetachEventCompletable isn't removed when View is removed from ViewTree
https://github.com/uber/AutoDispose/blob/7d86ab1d191e2e9c78a2ccf05ea514ad0ca0dc71/android/autodispose-android/src/main/java/com/uber/autodispose/android/DetachEventCompletable.java?_pjax=%23js-repo-pjax-container%2C%20div%5Bitemtype%3D%22http%3A%2F%2Fschema.org%2FSoftwareSourceCode%22%5D%20main%2C%20%5Bdata-pjax-container%5D#L79
Hello, Thank you very much for that great library.
I think I found a leak when DetachEventCompletable.Listener isn't removed from listeners inside a View. And this view was multiple times added and removed from ViewTree.
Description:
- when this button is clicked, observe the number of listeners in
android.view.View.ListenerInfo#mOnAttachStateChangeListenersusing debug break-points - Click the button "Add" and then "Remove" a few times
- Then observe the number of listeners in
android.view.View.ListenerInfo#mOnAttachStateChangeListenersagain
Result: the com.uber.autodispose.android.DetachEventCompletable listeners are not removed using
android.view.View.removeOnAttachStateChangeListener that should be done in
com.uber.autodispose.android.DetachEventCompletable.Listener.onViewDetachedFromWindow.
Probably the fix would be simple:
@Override
public void onViewDetachedFromWindow(View v) {
if (!isDisposed()) {
observer.onComplete();
v.removeOnAttachStateChangeListener(this) // <---------- this is a fix.
}
}
Sample project: TestUberAutodisposeApp.zip
Nice catch! Want to send a PR?