Обмен данными среди видов деятельности и услуг - PullRequest
29 голосов
/ 23 августа 2010

Я работаю над небольшим проектом Android, где необходимо разделить некоторые данные между несколькими действиями и сервисом, который работает в отдельном процессе. Я просто хотел бы знать, какие у меня есть варианты с точки зрения обмена данными? Класс приложения? IPC? На основе файлов? Трансляции? Спасибо, ребята!

1 Ответ

53 голосов
/ 23 августа 2010

1.Похоже, вам нужно транслировать некоторую информацию.Вы сможете установить широковещательные приемники в любой деятельности / услуге, о которой вы хотели бы получать уведомления.

Подробнее о Broadcastreceiver и о отправке широковещательных сообщений

2. Как передать данные между операциями / службами в рамках одного приложения?

Это зависит от типа данных, которыми вы хотите поделиться:

Примитивные данныеТипы Для совместного использования примитивных данных между операциями / службами в приложении используйте Intent.putExtras ().Для передачи примитивных данных, которые необходимо сохранить, используйте механизм хранения Предпочтения .

Непостоянные объекты Для совместного использования сложных непостоянных пользовательских объектов в течение короткого времени,Рекомендуются следующие подходы:

Класс android.app.Application

Приложение android.app.Application является базовым классом для тех, кому необходимо поддерживать состояние глобального приложения.,Доступ к нему можно получить через getApplication () из любого действия или службы.Он имеет несколько методов жизненного цикла и будет автоматически создан Android, если вы зарегистрируете его в AndroidManifest.xml.

Открытое статическое поле / метод

AnАльтернативный способ сделать данные доступными через деятельность / службы - это использование открытых статических полей и / или методов.Вы можете получить доступ к этим статическим полям из любого другого класса в вашем приложении.Для совместного использования объекта действие, которое создает ваш объект, устанавливает статическое поле для указания на этот объект, а любое другое действие, которое хочет использовать этот объект, просто получает доступ к этому статическому полю.

HashMap из WeakReferences дляОбъекты

Вы также можете использовать HashMap WeakReferences для объектов с длинными ключами.Когда действие хочет передать объект другому действию, оно просто помещает объект на карту и отправляет ключ (который является уникальным длинным, основанным на счетчике или отметке времени) получателю действия с помощью преднамеренных дополнений.Операция получателя извлекает объект с помощью этого ключа.

Класс Singleton

Существуют преимущества использования статического Singleton, например, вы можете ссылаться на них без приведения getApplication.() к классу, специфичному для приложения, или к тому, чтобы повесить интерфейс на все ваши подклассы Application, чтобы вместо этого различные модули могли ссылаться на этот интерфейс.

Но жизненный цикл статикине очень хорошо под вашим контролем;чтобы придерживаться модели жизненного цикла, класс приложения должен инициировать и разрушать эти статические объекты в методах onCreate () и onTerminate () класса приложения

Постоянные объекты Evenв то время как приложение, кажется, продолжает работать, система может решить завершить свой процесс и перезапустить его позже.Если у вас есть данные, которые необходимо сохранить от одного вызова действия к другому, вам нужно представить эти данные как состояние, которое сохраняется действием, когда ему сообщают, что оно может исчезнуть.

Для совместного использования комплексапостоянные определяемые пользователем объекты, рекомендуются следующие подходы:

Application Preferences
Files
contentProviders
SQLite DB

Если общие данные необходимо сохранить в разных точках, где процесс приложения может быть уничтожен, то поместите эти данные в постоянное хранилище, например, «Предпочтения приложения»,БД SQLite, Файлы или ContentProviders.Пожалуйста, обратитесь к Хранилище данных для получения дополнительной информации о том, как использовать эти компоненты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...