sockeqwe / mosby

A Model-View-Presenter / Model-View-Intent library for modern Android apps
http://hannesdorfmann.com/mosby/
Apache License 2.0
5.49k stars 841 forks source link

Memory leak in ViewGroupMviDelegateImpl #310

Open qwert2603 opened 6 years ago

qwert2603 commented 6 years ago

Hello! I found a memory leak in ViewGroupMviDelegateImpl. Mosby version is 3.1.0.

Steps to reproduce:

After that CustomView will be in memory until activity is destroyed. I also found that this is because of registering ActivityLifecycleCallbacks when creating ViewGroupMviDelegateImpl. ViewGroupMviDelegateImpl removes ActivityLifecycleCallbacks only when activity is destroyed. But there may be a lot of such CustomView those will hang in memory though they are detached and removed from view hierarchy.

I reviewed logic of consuming activity-lifecycle in ViewGroupMviDelegateImpl and may be we can register ActivityLifecycleCallbacks when attaching view to presenter and unregister ActivityLifecycleCallbacks in two cases: when activity is destroying and also when detaching view from presenter ?

sockeqwe commented 6 years ago

Thanks for the detailed explanation. I have to check out the related code next week. Honestly, I can't remember whats going on internally :)

Alexander Zhdanov notifications@github.com schrieb am Sa., 28. Apr. 2018, 09:58:

Hello! I found a memory leak in ViewGroupMviDelegateImpl. Mosby version is 3.1.0.

Steps to reproduce:

  • create CustomView extending MviFrameLayout or MviLinearLayout or MviRelativeLayout
  • programmaticaly add this CustomView to view hierarchy while activity is resumed
  • programmaticaly remove this CustomView from view hierarchy while activity is resumed

After that CustomView will be in memory until activity is destroyed. I also found that this is because of registering ActivityLifecycleCallbacks when creating ViewGroupMviDelegateImpl. ViewGroupMviDelegateImpl removes ActivityLifecycleCallbacks only when activity is destroyed. But there may a lot of such CustomView those will hang in memory though they are detached and removed from view hierarchy.

I reviewed logic of consuming activity-lifecycle in ViewGroupMviDelegateImpl and may be we can register ActivityLifecycleCallbacks when attaching view to presenter and unregister ActivityLifecycleCallbacks in two cases: when activity is destroying and also when detaching view from presenter ?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/sockeqwe/mosby/issues/310, or mute the thread https://github.com/notifications/unsubscribe-auth/AAjnrk7HcRi4n-5dbyOkpn3nro-Fz8LIks5ttCFCgaJpZM4TrTJj .

dimsuz commented 6 years ago

+1 I have experienced this issue too, caught it with Leak Canary.