Утечка канарейки обнаруживает некоторую утечку памяти на отрывных фрагментах - PullRequest
0 голосов
/ 28 октября 2019

Когда я отсоединяю фрагменты от действия, Leak Canary обнаруживает некоторые утечки памяти внутри androidx.core.widget.NestedScrollView. У меня нет наблюдаемого в нем и просто модель представления, привязанная к объекту привязки данных.

ApplicationLeak(className=androidx.core.widget.NestedScrollView, leakTrace=
┬
.
.
.
│    ↓ MainActivity.controller
├─ com.ncapdevi.fragnav.FragNavController
│    Leaking: NO (ArrayList↓ is not leaking)
│    ↓ FragNavController.rootFragments
├─ java.util.ArrayList
│    Leaking: NO (Object[]↓ is not leaking)
│    ↓ ArrayList.elementData
├─ java.lang.Object[]
│    Leaking: NO (MoreFragment↓ is not leaking)
│    ↓ array Object[].[3]
├─ my.package.name.ui.main.more.MoreFragment
│    Leaking: NO (Fragment#mFragmentManager is not null)
│    Fragment.mTag=my.package.name.ui.main.more.MoreFragment4
│    ↓ MoreFragment.binding
│                   ~~~~~~~
├─ my.package.name.databinding.FragmentMoreBindingImpl
│    Leaking: UNKNOWN
│    ↓ FragmentMoreBindingImpl.mRoot
│                              ~~~~~
╰→ androidx.core.widget.NestedScrollView
      Leaking: YES (ObjectWatcher was watching this)
      mContext instance of my.package.name.ui.main.MainActivity with mDestroyed = false
      View#mParent is null
      View#mAttachInfo is null (view detached)
      View.mWindowAttachCount = 1
      key = 2262922d-06f8-4abb-ba7b-d276c6fe3082
      watchDurationMillis = 1910
      retainedDurationMillis = -1
, retainedHeapByteSize=7132)

1 Ответ

0 голосов
/ 28 октября 2019

MoreFragment удерживает FragmentMoreBindingImpl (который сам содержит NestedScrollView) после onDestroyView. Вы должны очистить ссылку на привязку в Fragment.onDestroyView ()

...