Создает ли синглтон внутри класса приложения утечку памяти? - PullRequest
1 голос
/ 16 апреля 2020

У меня есть класс Authenticator, которому требуется context для выполнения некоторой задачи с SharedPreferences. Я создал синглтон класса внутри своего пользовательского класса приложения, так что мне не нужно каждый раз передавать контекст для создания экземпляра моего Authenticator. Это правильный подход или это может вызвать утечку памяти или другие проблемы?

Мой Application класс:

class App : Application() {

    override fun onCreate() {
        super.onCreate()
        //Plant Timber for Logging in Debug Build
        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree())
        }

        Authenticator.createInstance(this)

    }

    ...
    ....
}

На других классах я могу получить доступ к синглтону следующим образом:

Authenticator.INSTANCE

1 Ответ

2 голосов
/ 16 апреля 2020

Когда такие объекты, как Context, Activity, Application, ..., которые имеют жизненные циклы, сохраняются как объекты c или в объектах c, вы должны позаботиться об их очистке по окончании жизненного цикла. Если вы это сделаете, не должно быть никаких проблем с их хранением. Просто отпустите экземпляры, когда жизненный цикл закончится.

Для более ясного объяснения жизненный цикл Activity's заканчивается на onDestroy, и вам следует переопределить эту функцию и правильно разрешить доступ к ней. для получения более подробной информации вы можете посетить документацию android для жизненных циклов. В таких случаях, как завершение работы приложения, вся память, используемая приложением, будет очищена, и утечка не произойдет, поэтому вам не следует беспокоиться о доступах в классе Application, таких как сохранение глобального контекста приложения.

...