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

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

29
задан Konstantin Burov 23 August 2010 в 16:37
поделиться

1 ответ

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

Читайте больше в Интернете о Broadcastreceiver и о send broadcast

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

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

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

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

Класс android.app.Application

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

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

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

HashMap слабых ссылок на объекты

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

Класс Singleton

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

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

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

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

Application Preferences
Files
contentProviders
SQLite DB

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

53
ответ дан 28 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: