Нужно ли мне действительно передавать экземпляры контекста глубоко в приложение?

Где-то в приложении мне нужно получить локализованную строку, используя метод getString для сообщения об ошибке. Для этого мне нужен экземпляр контекста, полученный от, например, Activity. Действительно ли это так спроектировано? Действительно ли я вынужден передавать эти объекты в классы и методы или мне не хватает этой точки, и есть ли другой способ получить ссылку на строку?

Чтобы уточнить, в Управлении у меня есть внутренний подкласс AsyncTask, который в doInBackground создает новый класс для некоторой короткой сетевой обработки вне потока пользовательского интерфейса. Я хочу, чтобы сообщения об ошибках были локализованы, и для этого мне нужно передать экземпляр Context (другими словами, Activity) в этот класс. Дизайн получения значений ресурсов из XML-файлов просто кажется немного неинтуитивным. Это заставляет меня задаться вопросом, почему это так связано вместе с экземплярами контекста, а не с чем-то статическим или – простите меня – одноэлемент, поскольку контекст подразумевает глобальный контекст приложения, а не только его часть как Activity.

Нет, ты не должен этого делать. Простое правило: Если вам нужен контекст для касания пользовательского интерфейса или связан только с внутренними элементами класса активности, то вы должны использовать контекст активности. Даже тогда важно, чтобы в любой ссылке на контекст не было жизни, которая больше, чем активность.

Большая опасность не следовать этому заключается в том, что вы передаете ссылку на контекст активности куда-нибудь глубже в свой код, и ваша деятельность уничтожается, пока ссылка, которую вы держите, все еще находится в области видимости. Вы просто пропустили свою деятельность и все, на что она ссылается. Я бы порекомендовал не передавать контекст активности вне деятельности, если это действительно важно и даже тогда, быть уверенным в том, чтобы контролировать это время жизни.

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

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

Наконец, небольшая педантичная точка. Вы не пропускаете объекты нигде. Вы передаете ссылку, фактически значение ссылки на объект. Все в Java передается по значению.

Вы всегда можете расширить класс приложения. Создайте статический метод для getInstace (), чтобы получить контекст.