Это плохая практика, чтобы держать экземпляр приложения контекста?

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

Итак, с этой точки зрения, является ли плохой практикой сохранение контекста приложения в моем классе Application? Может ли это привести к массовой утечке памяти?

Вот пример:

public class MyApp extends Application {
    private static Context appContext = null; // <-- here is the thing!

    @Override
    public void onCreate() {
        appContext = this;
    }

    public static Context getApplicationContextSingleton () {
        return MyApp.appContext;
    }
}

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

1 ответ

Решение

Это плохая практика для сохранения контекста приложения в моем классе приложения?

Это кодовый запах.

Может ли это привести к массовой утечке памяти?

Наличие статического члена данных не приведет к большой утечке памяти. Является ли ваше чрезмерное использование Application Объект приведет к массовой утечке памяти, зависит от того, где и как вы его используете.

Какие недостатки я не вижу?

Не все Context с созданы равными. Вообще говоря, использовать только Application когда вы точно знаете, зачем вам Application контекст, не для всего.

У Дейва Смита из DoubleEncore есть отличное сообщение в блоге, в котором рассматриваются различия между типами Context и когда использовать один над другим.

Другие вопросы по тегам