Передача Контекста Действия конструкторам для использования внутренне - является этим плохо

Это - плохая практика, чтобы передать Контекст конструктору и сохранить его как частную переменную для внутреннего пользования? Другая опция состоит в том, чтобы передать Контекст в качестве параметра методам, для которых нужен он.

Который является более оптимальным вариантом? У меня есть чувство, что передача конструктору могла бы привести к утечкам памяти случайно.

21
задан Nike15 22 December 2015 в 09:09
поделиться

3 ответа

Часто все, что вам нужно, это ApplicationContext, поэтому можно передать this.getApplicationContext() вместо просто this. Ваш контекст приложения в любом случае существует в течение всего времени работы приложения, так что это не утечка памяти.

11
ответ дан 29 November 2019 в 21:52
поделиться

Это зависит от времени жизни вашего объекта. Если вы уверены, что объект будет использоваться вашим действием только для внутренних целей, вы не против передачи контекста конструктору, иначе не передавайте контекст.

Если у объекта есть ссылка на контекст, это прекратит сбор мусора для Activity, а поскольку Activity имеет ссылки на все его представления, это означает, что вы можете легко очень быстро потерять много памяти.

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

Так что, вероятно, лучше всего перестраховаться и передавать Контекст по мере необходимости.

9
ответ дан 29 November 2019 в 21:52
поделиться

В главном приложении (которое запускается) объявите переменную appContext: «public static Context appContext;» Затем в методе onCreate () для этого основного приложения присвойте: "appContext = this;" Поскольку appContext является общедоступным, любой другой класс в этом пакете может затем использовать appContext для отслеживания ресурсов XML. Это лучше (с точки зрения памяти)?

Еще лучше было бы объявить объект Resources как общедоступный статический в основном приложении, а затем использовать его в другом месте, поскольку ресурсы - это все, что вам нужно.

1
ответ дан 29 November 2019 в 21:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: