Когда мы должны вызвать getContext и getActivity раз и навсегда? - PullRequest
0 голосов
/ 11 мая 2019

Я много искал в StackOverflow и, в более общем плане, в Google, объяснил, как использовать контексты в среде Android, но нашел только отдельные фрагменты объяснений.

Когда мы должны использовать getContext вместо getActivity? Вопрос уточняется ниже.

  • Внутри DialogFragment и других Fragment: для создания Toast, построения AlertDialog, создания экземпляра Intent ... требуется контекст. Должны ли мы использовать getActivity или getContext?
  • А если эти операции записаны в Activity вместо фрагмента?

Кстати, исключение Null и / или утечка памяти могут произойти при вызове getContext и getActivity: когда? Точнее, происходит ли это только тогда, когда время жизни вызывающего абонента является (строгим) подмножеством времени жизни вызываемого объекта (например, Dialog вызывает getActivity/getContext, который возвращает ноль, если он еще не присоединен к своей активности)

1 Ответ

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

Из DOCS объект Context содержит глобальную информацию о среде приложения.Он позволяет получить доступ к ресурсам и классам, относящимся к конкретному приложению, а также к дополнительным вызовам для операций на уровне приложения, таких как запуск, широковещание и получение и т. Д.

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

метод getActivity() возвращает ссылку на текущую активность, связанную сФрагмент объекта.Если с фрагментом нет активности, он вернет null.Лично я никогда не использую этот метод при передаче аргумента контекста, я использую только getContext() и getApplicationContext().

getApplicationContext() особенно полезно, потому что он использует контекст, жизненный цикл которого отделен от текущего контекста, онпривязан к времени жизни процесса, а не к текущему компоненту.Это означает, что он использует контекст приложения, а не части приложения, как действие. см. Здесь

Рекомендации по использованию контекста:

  • getContext() и getApplicationContext() достаточно для передачи аргумента контекста.Если они не доступны сразу, вы можете использовать цепочку getActivity().getApplicationContext() для передачи соответствующего аргумента контекста.Это означает, что вы можете использовать это для создания Toasts, AlertDialogs, Intents, Fragments и других манипуляций представления, которые требуют контекста.
  • Никогда не назначайте контекст статической (классовой) переменной, Itсоздаст утечку памяти!
  • Если вы используете getApplicationContext() для регистрации трансляций, вы должны выполнить соответствующую очистку, чтобы предотвратить утечки памяти. см. Здесь

Обратите внимание, что это мои личные подходы, я должен быть исправлен:).

...