Как создать две взаимодействующие, но не блокирующие службы в Android?

1

Я смущен тем, где работают службы Android. Я знаю, что службы с маркировкой 'remote' работают в своих процессах, но как насчет обычных локальных сервисов?

Я прошу, чтобы я хотел, чтобы две локальные службы сотрудничали, но не блокировались друг от друга. Так, например, Service1 управляет сетевым подключением и принимает пакеты. При получении пакета мне нужна эта услуга, чтобы передать пакет Service2, который обрабатывает информацию, и предпринимает некоторые действия, в том числе, возможно, отправив сообщение возврата. Мне нужно, чтобы квитанция, раздача и обработка выполнялись асинхронно, поэтому сетевая услуга может продолжать получать пакеты, в то время как служба приложений обрабатывает их. Как это обеспечить?

Я знаю, что одним из решений является трансляция намерений, но как я могу включить пользовательские объекты данных (т.е. пакеты) в намерение? Я не хочу реализовывать подробный интерфейс (overkill для локальных служб), но мне действительно нужно иметь возможность передавать сложные объекты данных между службами.

Спасибо

Теги:

1 ответ

0

Все в вашем файле манифеста, который определен для запуска в том же процессе, также имеет один и тот же основной поток. Этот поток также иногда является потоком пользовательского интерфейса, если в этом процессе есть действия, выполняемые в нем. Итак, если у вас есть две локальные службы, и они работают в одном процессе, они собираются использовать один и тот же основной исполняемый поток. Для того, чтобы они оба работали одновременно "(до тех пор, пока не будут созданы всевозможные устройства для Android, все исполнение является последовательным в любом случае), тогда ваша служба, обрабатывающая сетевое соединение, будет нуждаться в этом в отдельном потоке. Другим вашим службам понадобится другой поток.

Ваша проблема обычно называется моделью производителя-потребителя. Здесь ссылка быстрый пример простой реализации с использованием очередей блокировки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню