mosby icon indicating copy to clipboard operation
mosby copied to clipboard

Memory leak in ViewGroupMviDelegateImpl

Open qwert2603 opened this issue 7 years ago • 2 comments

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 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 ?

qwert2603 avatar Apr 28 '18 07:04 qwert2603

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 [email protected] 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 .

sockeqwe avatar Apr 28 '18 08:04 sockeqwe

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

dimsuz avatar Apr 28 '18 09:04 dimsuz