Получение утечки памяти после вызова lifecycle.addObserver - PullRequest
0 голосов
/ 09 мая 2019

После добавления наблюдателя жизненного цикла из арочного компонента Android Jetpack я обнаружил следующую утечку. Есть идеи?

LeakingInstance(referenceKey=3f842e15-cca3-465a-8345-3a241c8befca, referenceName=, instanceClassName=androidx.navigation.fragment.NavHostFragment, watchDurationMillis=561193, excludedLeak=false, leakTrace=
┬
├─ android.view.inputmethod.InputMethodManager$1
│    Leaking: NO (it's a GC root)
│    Anonymous subclass of com.android.internal.view.IInputMethodClient$Stub
│    ↓ InputMethodManager$1.this$0
│                           ~~~~~~
├─ android.view.inputmethod.InputMethodManager
│    Leaking: UNKNOWN
│    ↓ InputMethodManager.mImeInsetsConsumer
│                         ~~~~~~~~~~~~~~~~~~
├─ android.view.ImeInsetsSourceConsumer
│    Leaking: UNKNOWN
│    ↓ ImeInsetsSourceConsumer.mController
│                              ~~~~~~~~~~~
├─ android.view.InsetsController
│    Leaking: UNKNOWN
│    ↓ InsetsController.mViewRoot
│                       ~~~~~~~~~
├─ android.view.ViewRootImpl
│    Leaking: UNKNOWN
│    ↓ ViewRootImpl.mActivityConfigCallback
│                   ~~~~~~~~~~~~~~~~~~~~~~~
├─ android.app.-$$Lambda$ActivityThread$ActivityClientRecord$HOrG1qglSjSUHSjKBn2rXtX0gGg
│    Leaking: UNKNOWN
│    ↓ -$$Lambda$ActivityThread$ActivityClientRecord$HOrG1qglSjSUHSjKBn2rXtX0gGg.f$0
│                                                                                ~~~
├─ android.app.ActivityThread$ActivityClientRecord
│    Leaking: UNKNOWN
│    ↓ ActivityThread$ActivityClientRecord.activity
│                                          ~~~~~~~~
├─ com.x.x.MainActivity
│    Leaking: YES (Activity#mDestroyed is true)
│    ↓ MainActivity.mFragments
├─ androidx.fragment.app.FragmentController
│    Leaking: YES (MainActivity↑ is leaking)
│    ↓ FragmentController.mHost
├─ androidx.fragment.app.FragmentActivity$HostCallbacks
│    Leaking: YES (FragmentController↑ is leaking)
│    ↓ FragmentActivity$HostCallbacks.mFragmentManager
├─ androidx.fragment.app.FragmentManagerImpl
│    Leaking: YES (FragmentActivity$HostCallbacks↑ is leaking)
│    ↓ FragmentManagerImpl.mPrimaryNav
╰→ androidx.navigation.fragment.NavHostFragment
​     Leaking: YES (Fragment#mFragmentManager is null)
, retainedHeapSize=null)```

Ответы [ 2 ]

1 голос
/ 14 июля 2019

Это известная утечка IME в платформе Android на Q Beta.Должен быть идентифицирован как известная утечка в последней версии: https://github.com/square/leakcanary/blob/master/leakcanary-analyzer/src/main/java/leakcanary/AndroidKnownReference.kt#L312

0 голосов
/ 11 июля 2019

Существуют различные состояния наблюдателя жизненного цикла, такие как @OnLifecycleEvent (Lifecycle.Event.ON_PAUSE) или @OnLifecycleEvent (Lifecycle.Event.ON_RESUME). Вы можете удалить прослушиватель или приемник в методе жизненного цикла onPause, а затем снова инициализировать в методе жизненного цикла onResume..

Пожалуйста, используйте ссылку ниже, чтобы просмотреть подробную информацию о компонентах, поддерживающих lifecyler, и их жизненный цикл

Документация Lifecycler Observer

...