Подтвердить что ты не робот

Обмен данными между видами деятельности и услугами

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

4b9b3361

Ответ 1

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

Подробнее о Broadcastreceiver и о отправить трансляцию

2. Как передавать данные между Activity/Services в одном приложении?

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

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

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

Класс android.app.Application

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

Публичное статическое поле/метод

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

HashMap of WeakReferences to Objects

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

Класс Singleton

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

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

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

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

Application Preferences
Files
contentProviders
SQLite DB

Если общие данные необходимо сохранить в точках, где процесс приложения может быть убит, поместите эти данные в постоянное хранилище, например, в приложения, SQLite DB, Files или ContentProviders. Подробнее о том, как использовать эти компоненты, см. Хранилище данных.