Ответ
В Android Singleton инициализируется при первом обращении к нему (ленивая инициализация). Однако есть нюансы:
- Обычный Singleton (через
getInstance()):
class MySingleton {
companion object {
private var instance: MySingleton? = null
fun getInstance(): MySingleton {
return instance ?: synchronized(this) {
instance ?: MySingleton().also { instance = it }
}
}
}
}
- Инициализация при объявлении (ранняя инициализация):
object MySingleton {
init {
// код инициализации
}
}
В Android также стоит учитывать:
- Singleton живет в памяти пока живёт процесс приложения
- Может быть пересоздан при убийстве и восстановлении процесса
- Не подходит для хранения данных, которые должны сохраняться между сессиями