Android передает постоянную информацию в пакетах или использует шаблон синглтона?
Просто интересно, как лучше передавать информацию между активами, добавлять ее в пакет или использовать одноэлементный класс для хранения и доступа к этим данным. Я использовал оба в прошлом для различных проектов на стороне андроида, но сейчас я работаю над проектом андроида, который имеет гораздо больший масштаб, поэтому предпочел бы сделать все с самого начала.
Мое приложение проверяет подлинность пользователей и затем должно будет выполнять различные запросы на основе его идентификатора. Чтобы свести к минимуму связь между действиями, я бы подумал, что лучше всего добавить идентификатор в пакет, а затем разрешить каждому запросу деятельности запрашивать необходимую информацию; однако, чтобы повысить скорость отклика, я склонялся к использованию одноэлементного класса для хранения постоянной информации, предотвращая больше запросов, чем необходимо.
5 ответов
Лично я бы создал расширение Application
хранить состояние вашего приложения и обмениваться данными между различными видами деятельности. Application
действует как контекст для всего вашего приложения, и Android гарантирует, что в вашем приложении всегда будет только один экземпляр. Следовательно, он работает аналогично определению вашего собственного синглтона, но с использованием Application
позволит Android взять под контроль жизненный цикл ваших общих данных и в основном сделает управление памятью за вас.
Вот еще несколько деталей. Если вы пойдете по этому пути, вы можете просто добавить любой метод получения / установки (или другой метод) в расширение вашего приложения для хранения / извлечения данных и выполнения операций с ними. Особенно последний может стать довольно трудным для управления (и поддерживать согласованность) при использовании Bundle
s проходили назад и вперед между действиями. Если бы только использовать Bundle
если данные нужны только в одном или двух местах, которые являются соседями в потоке операций и не требуют каких-либо (сложных) операций для их выполнения.
Лучший способ сделать это - использовать SharedPreferences, чтобы сохранить userId, который вам нужно сохранить и использовать повторно. Конечно, вы можете использовать одноэлементный подход или даже класс приложения, но данные будут потеряны после уничтожения приложения.
Единственный раз, когда я передаю данные между Деятельностями через bunlde, это когда мне не нужно какое-то время обращаться (т. Е. К resID ресурса, который я хочу использовать только один раз в вызывающем действии и т. Д.). Я также думаю, что разница в отзывчивости будет минимальной, так что это не должно вызывать беспокойства. Я предлагаю синглтонный подход
Передача пачек - утомительная работа. Вам нужно будет передавать пакет для каждого изменения в активности, чтобы убедиться, что значение не потеряно, даже если вы не используете значение в вызываемой активности.
Синглтон-паттерн имеет несколько плохих результатов. Например: Из основной деятельности вы называете вторичной деятельностью. Телефонный звонок прервал вашу работу. После завершения телефонного звонка Android пытается вывести на экран вторичную активность. Вот мой кошмар - многие пользователи жалуются на исключения - Google сообщил мне NULL-указатели в моем синглтоне. Таким образом, вы должны предоставить не только синглтон, но и все данные в синглтоне также должны быть одинаковыми. Это сделано очень сложно:(