Это плохая практика, чтобы держать экземпляр приложения контекста?
Насколько я понимаю, приложение в 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
и когда использовать один над другим.