Я работаю над небольшим проектом Android, где необходимо разделить некоторые данные между несколькими действиями и службой, которая выполняется в отдельном процессе. Я просто хотел бы узнать, какие у меня варианты с точки зрения обмена данными? Класс приложения? IPC? На основе файлов? Трансляции? Спасибо, ребята!Обмен данными между действиями и услугами
ответ
1. Похоже, вам нужно транслировать некоторую информацию. Вы, чем сможете установить широковещательные приемники в любой активности/услуге, о которой вы хотели бы получить уведомление.
Читать онлайн о Broadcastreceiver и о send broadcast
2. Как передавать данные между мероприятиями/услугами в рамках одного приложения?
Это зависит от типа данных, которые вы хотите поделиться:
Примитивные типы данных Для обмена данными между примитивными деятельности/Услуги в приложении, используйте Intent.putExtras(). Для передачи примитивных данных, которые необходимо сохранить, используйте механизм хранения Preferences.
непостоянных объекты Для обмена сложного непостоянного определенного пользователя объекты на короткий срок, рекомендуются следующие подходы:
Класс android.app.Application
андроида .app.Application - базовый класс для тех, кто должен поддерживать состояние глобального приложения. К нему можно получить доступ через getApplication() из любой Activity или Service. Он имеет несколько методов жизненного цикла и будет автоматически создан Android, если вы зарегистрируете его в AndroidManifest.xml.
Публичный статическое поле/метод
Альтернативный способ сделать данные доступными через Деятельность/Услуги заключается в использовании государственных статических полей и/или методов. Вы можете получить доступ к этим статическим полям из любого другого класса вашего приложения. Чтобы совместно использовать объект, действие, которое создает ваш объект, устанавливает статическое поле, указывающее на этот объект, и любое другое действие, которое хочет использовать этот объект, просто обращается к этому статическому полю.
HashMap лучше из WeakReferences на объекты
Вы также можете использовать HashMap из WeakReferences для объектов с длинными ключами. Когда действие хочет передать объект другому действию, оно просто помещает объект в карту и отправляет ключ (который является уникальным Long на основе счетчика или отметки времени) для активности получателя с помощью дополнительных утилит. Активность получателя извлекает объект с помощью этого ключа.
одноплодной класс
Есть преимущества использования статического Singleton, например, вы можете обратиться к ним без литья getApplication() для класса конкретного приложения, или идти на неприятности висит интерфейс на всех ваших подклассах приложений, чтобы ваши различные модули могли ссылаться на этот интерфейс.
Но жизненный цикл статики не очень под вашим контролем; поэтому соблюдать модели жизненного цикла, класс приложения должен инициировать и разрушить эти статические объекты в OnCreate() и OnTerminate() методу класса Application
постоянных объекты Даже когда появляется приложение к продолжить работу, система может захотеть убить свой процесс и перезапустить его позже. Если у вас есть данные, которые необходимо сохранить от одного вызова активности к следующему, вам необходимо представить эти данные как состояние, которое будет сохранено в результате активности, когда будет сообщено, что оно может исчезнуть.
Для обмена сложного настойчивого определенного пользователя объекты, рекомендуются следующие подходы:
Application Preferences
Files
contentProviders
SQLite DB
Если разделяемые данные должны быть сохранены по точкам, где процесс подачи заявки может быть убит, а затем поместить эти данные в постоянном хранения, таких как настройки приложений, SQLite DB, Files или ContentProviders. Пожалуйста, обратитесь к Data Storage за дополнительной информацией об использовании этих компонентов.
- 1. Обмен данными между действиями
- 2. Обмен данными между действиями
- 3. Обмен данными между действиями и фрагментами
- 4. Обмен данными между действиями и поведением приложения
- 5. Обмен данными между фрагментами и действиями - NullPointerException
- 6. MonoDroid: обмен нетривиальными данными между действиями
- 7. Обмен данными между действиями/презентаторами в GWT
- 8. Обмен данными между тестами
- 9. Обмен меню между действиями
- 10. Обмен переменными между классами и действиями
- 11. Обмен данными между DLL
- 12. Обмен данными между программами
- 13. Обмен данными между микросервисами
- 14. Обмен данными между angularJS
- 15. Обмен данными между просмотрщиками
- 16. Обмен данными между JVM
- 17. Обмен данными между контейнерами
- 18. Обмен данными между классами
- 19. Обмен огромными данными между микросервисами
- 20. Обмен данными между потоками
- 21. Обмен данными между XIB
- 22. Обмен данными между ViewControllers
- 23. Обмен данными между видами
- 24. Обмен данными между HtmlHelpers
- 25. Android: Можно ли использовать GoogleApiClient между действиями и услугами?
- 26. Обмен данными между activitiesin Android
- 27. Android: Переключение между двумя действиями и обмен информацией между ними
- 28. Обмен переменными между действиями в asp.net MVC
- 29. Обмен приложениями для Android между действиями останавливается
- 30. Обмен данными с данными Java между классами
Вау, большое спасибо за этот очень информативный ответ. – Jack
Зачем тратить столько памяти на абстракции. Разве нет возможности для глобальных данных. Почему java/android ребята тратят столько памяти – mSO
сервис и активность запускаются как разные процессы, поэтому они не разделяют пространство памяти, поэтому большинство приведенных выше предложений не будут работать. – whoami