Подтвердить что ты не робот

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

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

Какой вариант лучше? Я чувствую, что переход к конструктору может привести к утечке памяти случайно.

4b9b3361

Ответ 1

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

Ответ 2

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

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

Легко поймать себя здесь, так как такие вещи, как вращение устройства, заставляют Действия воссоздавать и легко висеть на объекте, не осознавая.

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

Ответ 3

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

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