Я объявляю класс Singleton, где мне нужно передать параметр контекста для одного из методов этого класса.
public class MySingleton() {
Private Context mContext;
Private static MySingleton mInstance;
public static MySingleton mInstance() {
if (mInstance == null) {
mInstance = new MySingleton();
}
return mInstance;
}
public void myMethod(Context context)
{
this.mContext = context;
// write your code here....
}
}
вызовет ли это утечку памяти.
Возможно, поскольку вы не знаете, на какой Context
вы будете ссылаться. Безопаснее было бы написать:
this.mContext = context.getApplicationContext();
Таким образом, вы уверены, что mContext
ссылается на Application
синглтон.
@HmH: Это может быть безопасно, хотя это будет немного зависеть от того, что вы делаете с этой переменной.
Этот метод вызывается для создания AlarmManager, а контекст используется для инициирования намерения и PendingIntent. Но метод вызывается 3 раза из 3 разных мест.
@HmH: То, что вы описываете, должно быть безопасным, особенно если вы не держитесь за какие-либо из этих вещей в полях вашего синглтона. Вы всегда можете использовать такие инструменты, как Leak Canary, чтобы попытаться увидеть, не происходит ли утечка контекста.
Что, если я удалю mContext и оставлю контекст как локальную переменную?