Передача контекста активности конструкторам для внутреннего использования - это плохо? - PullRequest
21 голосов
/ 26 мая 2010

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

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

Ответы [ 3 ]

11 голосов
/ 26 мая 2010

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

9 голосов
/ 26 мая 2010

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

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

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

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

1 голос
/ 20 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...