Когда Singleton объект инициализируется

«Когда Singleton объект инициализируется» — вопрос из категории Паттерны, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Android Singleton инициализируется при первом обращении к нему (ленивая инициализация). Однако есть нюансы:

  1. Обычный Singleton (через getInstance()):
class MySingleton {
    companion object {
        private var instance: MySingleton? = null

        fun getInstance(): MySingleton {
            return instance ?: synchronized(this) {
                instance ?: MySingleton().also { instance = it }
            }
        }
    }
}
  1. Инициализация при объявлении (ранняя инициализация):
object MySingleton {
    init {
        // код инициализации
    }
}

В Android также стоит учитывать:

  • Singleton живет в памяти пока живёт процесс приложения
  • Может быть пересоздан при убийстве и восстановлении процесса
  • Не подходит для хранения данных, которые должны сохраняться между сессиями