Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (1)

Лучшие ответы пользователя

Все ответы (1)
  • Android. Как бороться с подобными утечками памяти?

    @DocentTSR
    Android Dev
    Сергей,

    1. у фрагментов с выставленным setRetainInstance(true) - не должно быть интерфейса/вьюх вообще! Об этом написано в документаци, черным по белому. Это и является вашей утечкой.
    дополнительно: И в бэкстек его класть тоже нельзя!

    2. любой анонимный/внутренний не статичесикй класс - имеет не явную ссылку на внешний!

    3.
    - в методе onCreate у фрагмента особо делать ничего не нужно.
    - в методе onCreateView нужно создавать тока вьюху, ну или еще такие мелкие операции как setHasOptionsMenu.
    - вся основная логика делается в onViewCreated, уже после того как фрагмент приаттачился и создал все вьюхи.

    4. на будущее, любой листенер вы можете занулить в методе
    onDestroy - Activity
    onDestroyView - Fragment

    например
    adapter.setOnItemClickListener(null)

    и важно это делать ДО супер метода!

    5. По опыту говорю, все вот эти LeakCanary это для ленивых хипстеров.
    Нормальная тулза которая точно вам скажет, что течет, как сильно, и самое главное КТО удерживает эту ссылку покажет - MAT (Memory Analyser Tool) в связке с DDMS, не поленитесь разобраться, на хабре есть кучу статей.
    Ответ написан
    5 комментариев