Передача Context в качестве параметра методу в классе Singleton вызывает утечку памяти

Я объявляю класс 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....
     }
}

вызовет ли это утечку памяти.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, поскольку вы не знаете, на какой Context вы будете ссылаться. Безопаснее было бы написать:

this.mContext = context.getApplicationContext();

Таким образом, вы уверены, что mContext ссылается на Application синглтон.

Что, если я удалю mContext и оставлю контекст как локальную переменную?

HmH 13.05.2019 10:35

@HmH: Это может быть безопасно, хотя это будет немного зависеть от того, что вы делаете с этой переменной.

CommonsWare 13.05.2019 14:01

Этот метод вызывается для создания AlarmManager, а контекст используется для инициирования намерения и PendingIntent. Но метод вызывается 3 раза из 3 разных мест.

HmH 13.05.2019 15:48

@HmH: То, что вы описываете, должно быть безопасным, особенно если вы не держитесь за какие-либо из этих вещей в полях вашего синглтона. Вы всегда можете использовать такие инструменты, как Leak Canary, чтобы попытаться увидеть, не происходит ли утечка контекста.

CommonsWare 13.05.2019 15:49

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