Как передать данные между действиями / службами в рамках одного приложения?
Это зависит от типа данных, которыми вы хотите поделиться:
Примитивные типы данных
Для совместного использования примитивных данных между операциями / службами в приложении используйте Intent.putExtras (). Для передачи примитивных данных, которые необходимо сохранить, используйте механизм хранения Предпочтения .
Непостоянные объекты
Для кратковременного совместного использования сложных непостоянных пользовательских объектов рекомендуется использовать следующие подходы:
Класс android.app.Application
Приложение android.app.Application является базовым классом для тех, кому необходимо поддерживать глобальное состояние приложения. Доступ к нему можно получить через getApplication () из любого действия или службы. Он имеет несколько методов жизненного цикла и будет автоматически создан Android, если вы зарегистрируете его в AndroidManifest.xml.
Открытое статическое поле / метод
Альтернативный способ сделать данные доступными через деятельность / службы - это использование открытых статических полей и / или методов. Вы можете получить доступ к этим статическим полям из любого другого класса в вашем приложении. Для совместного использования объекта действие, которое создает ваш объект, устанавливает статическое поле для указания на этот объект, а любое другое действие, которое хочет использовать этот объект, просто обращается к этому статическому полю.
Хэш-карта слабых ссылок на объекты
Вы также можете использовать HashMap WeakReferences для объектов с длинными ключами. Когда действие хочет передать объект другому действию, оно просто помещает объект на карту и отправляет ключ (который является уникальным длинным, основанным на счетчике или отметке времени) получателю действия с помощью преднамеренных дополнений. Операция получателя получает объект с помощью этого ключа.
Класс Singleton
Есть преимущества использования статического Singleton, например, вы можете ссылаться на них, не приводя getApplication () к классу конкретного приложения, или не пытаясь повесить интерфейс на все ваши подклассы Application, чтобы ваши различные модули вместо этого можно ссылаться на этот интерфейс.
Но жизненный цикл статики не находится под вашим контролем; чтобы придерживаться модели жизненного цикла, класс приложения должен инициировать и разрушать эти статические объекты в методах onCreate () и onTerminate () класса приложения
Постоянные объекты
Даже если кажется, что приложение продолжает работать, система может решить прервать свой процесс и перезапустить его позже. Если у вас есть данные, которые необходимо сохранить от одного вызова действия к другому, вам нужно представить эти данные как состояние, которое сохраняется действием, когда ему сообщают, что оно может исчезнуть.
Для совместного использования сложных постоянных пользовательских объектов рекомендуется использовать следующие подходы:
Application Preferences
Files
contentProviders
SQLite DB
Если общие данные необходимо сохранить во всех точках, где процесс приложения может быть уничтожен, поместите эти данные в постоянное хранилище, например, «Настройки приложения», БД SQLite, «Файлы» или ContentProviders. Пожалуйста, обратитесь к хранилищу данных для получения дополнительной информации о том, как использовать эти компоненты.