Техника для получения ApplicationContext в любом месте - PullRequest
4 голосов
/ 25 ноября 2011

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

public class MyApp extends Application {
    private static MyApp instance;

    public static MyApp getInstance() {
        return instance;
    }

    public static Context getContext(){
        return instance.getApplicationContext();
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
}

Ответы [ 2 ]

5 голосов
/ 25 ноября 2011

Если вы просто не предоставляете открытый метод, который принимает Context в качестве аргумента внутри ваших классов, которым требуется Context (и передаете его из вашего Activity и т. Д.), Это способ сделать это.

4 голосов
/ 25 ноября 2011

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

Кроме того, наличие ApplicationContext, доступного повсеместно, позволяет вам быть более неаккуратным в том, как вы организуете свои классы, поскольку вам не нужно думать о том, какая функциональность действительно нуждается в ApplicationContext, и нужно ли вам это учитывать и т. Д. Это просто может быть, в зависимости от того, насколько ты дисциплинирован.

Я всегда довольно настороженно отношусь к синглетам, хотя другие известные люди не согласны, но я все еще довольно широко обсуждаю, являются ли синглеты образцом или антипаттерном. Если вы используете Google singleton и anti-pattern, вы найдете такие статьи, как this , которые, на мой взгляд, дают довольно хорошие результаты.

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