[Перевод] Почему разработчикам Android стоит забыть слово Singleton
Приложения Android обычно работают в рамках одного процесса, разделяя память и системные ресурсы. Однако Android предоставляет разработчикам гибкость для запуска отдельных компонентов — таких как Activities, Services, or BroadcastReceivers — в отдельных процессах. Система Android не гарантирует, что Singleton, написанный в приложении, будет действительно единственным.
Вот почему Singleton не является паттерном или антипаттерном программирования. Это чистое зло. Особенно в разработке Android. Если на собеседовании разработчика просят назвать известные ему паттерны, а он первым называет Singleton, то на этом собеседование можно заканчивать. Серьёзно.
И в этой статье я расскажу вам, почему.
Давайте представим, что у нас есть Singleton.
object Singleton
Будет ли один и тот же экземпляр объекта Singleton в Activity и IntentService или Service?
Ответ — НЕТ.
Потому что для Activity и для Service система Android выделяет отдельный процесс.
Кроме того, класс Application будет создан заново. В некоторых случаях Application создаст новый экземпляр класса Application. В некоторых случаях метод onCreate будет вызван несколько раз.
Вы можете проверить это, поиграв с настройкой android: process в файле Manifest.
Подведем итоги:
никогда не используйте Singleton в своем приложении;
будьте готовы к тому, что класс Application может иметь несколько экземпляров;
метод onCreate может быть вызван несколько раз.