две части Ответ:
первая часть: мифы и теории
В целом в ориентации объектов использование статических Globals не рекомендуется, потому что это довольно неконтролируемым. Вот откуда взялось предложение использовать Singleton
с геттерами/сеттерами. Это более управляемая управляемая среда. Но если вы являетесь единственным разработчиком приложения и не возражаете против этого. Это действительно лучшие практики и не требуются для правильного функционирования приложения.
Подкласс Application
или ваш собственный открытый класс не имеет значения, если все, что вы используете, это строки, int и т. Д. Это обычное дело в Интернете для подкласса приложения, если вы инициализируете объекты, которым нужен контекст, для пример базы данных. Лично мне не нравится этот подход слишком много. Это замедляет время загрузки и может содержать большие объекты, которые мне действительно не нужны в памяти. Для этих типов я обычно использую lazy-initialisation, где я держу ссылку public static
моего приложения, и всякий раз, когда я звоню, например, MyDatabase.get();
внутри get()
, я проверяю if(instance==null)
и затем инициализирую его с помощью общедоступного объекта Application
.
Если вы сохраняете статическую ссылку на объекты Activity, Fragment или View для Android, вы всегда будете сталкиваться с проблемами памяти. Эти классы являются БОЛЬШОЙ, они содержат ссылки на другие большие объекты, они используют много памяти, и поэтому в Рамочной структуре есть все досадные life-cycle
и saveState
. Таким образом, они могут быть уничтожены, когда требуется память и перестроены, когда они вернутся на экран.
вторая часть: Android путь
в Android не очень желательно, чтобы просто держать ссылки объектов на public static
, потому что те останутся в памяти навсегда, и мобильный телефон не похож на веб-сервер с терабайт оперативной памяти , Вся платформа Android имеет очень хорошо документированную и стабильную структуру передачи и сохранения значений (строки, int и т. Д.) Через объекты Bundle
. Эти связки вы можете перейти к активности через Intent
или к фрагментам через setArguments(Bundle)
, и их можно использовать для сохранения текущего состояния с использованием методов onSavedInstanceState
. И это разумный способ делать вещи по-разному. И это также помогает продвигать разделение классов, и даже вы могли бы походить на большую работу для небольших проектов, для крупных проектов это один из способов сохранить структуру и организацию.
глобальные глобальные значения ... в любом случае, пока вы не будете использовать экземпляры Activity/Service как глобальные (или класс, для которого требуется контекст Activity/Service, такой как экземпляр представлений и т. Д.), Тогда нет различий между глобальным классом и подклассом Application. .. – Selvin