[Перевод] Почему разработчикам Android стоит забыть слово Singleton

a21a58ac9f36c50e986d27bdbdb0d0da.jpg

Приложения 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 может быть вызван несколько раз.

© Habrahabr.ru