Android: утечки памяти из-за активности и контекста, хранящегося как атрибуты объектов? - PullRequest
0 голосов
/ 11 мая 2019

Есть ли риск вызвать исключение "Утечки памяти" ( например ), если мы создадим атрибут объекта activity и еще один context, определенный в методе onAttach()?

Это может быть полезно, особенно для context в диалоговом классе.

1 Ответ

1 голос
/ 11 мая 2019

Учитывая ссылку на #onAttach(), похоже, что вы имеете дело с фрагментами. По документации Android :

фрагмент может обращаться к экземпляру FragmentActivity с помощью getActivity () и легко выполнять такие задачи, как поиск представления в макете активности

API предназначены для предоставления вам любого необходимого Context, поэтому более логично просто использовать getActivity() там, где и когда это необходимо.

В общем, если вы берете ссылку на любой элемент пользовательского интерфейса или любой тип Context, вы должны убедиться, что:

  1. Время жизни того места, где вы держите ссылку, полностью содержится в образе жизни вещи, на которую вы ссылаетесь
  2. ИЛИ ... WeakReference используется и проверяется на null перед использованием, чтобы разрешить объекту, на который ссылаются, получить сборщик мусора

Жизненный цикл элементов пользовательского интерфейса строго содержится во вложении Context, поэтому для них вполне нормально напрямую ссылаться на контекст без использования WeakReference.

Кроме того, существуют явные примеры использования родительского контекста, переживающего фрагмент специально для диалогов .

...