Как сделать так, чтобы Android-сервис общался с Activity

Я пишу свое первое приложение для Android и пытаюсь наладить связь между услугами и действиями. У меня есть служба, которая будет работать в фоновом режиме и делать некоторые записи GPS и времени. У меня будет Активность, которая будет использоваться для запуска и остановки Сервиса.

Итак, во-первых, я должен быть в состоянии выяснить, работает ли Служба при запуске Действия. Здесь есть и другие вопросы, так что я думаю, что смогу это выяснить (но не стесняйтесь предлагать советы).

Моя настоящая проблема: если активность запущена, а служба запущена, мне нужен способ для отправки сообщений в активность. Простые строки и целые числа на данный момент - сообщения о статусе в основном. Сообщения не будут появляться регулярно, поэтому я не думаю, что опрос службы - это хороший способ, если есть другой путь. Я хочу получить это сообщение только тогда, когда действие было запущено пользователем - я не хочу запускать действие из службы. Другими словами, если вы запустите Activity, а служба будет запущена, вы увидите некоторые сообщения о состоянии в пользовательском интерфейсе Activity, когда произойдет что-то интересное. Если вы не запустите Activity, вы не увидите эти сообщения (они не такие интересные).

Похоже, я должен быть в состоянии определить, запущена ли служба, и если да, добавить активность в качестве прослушивателя. Затем удалите Activity как слушателя, когда Activity приостановится или остановится. Это действительно возможно? Единственный способ понять, как это сделать, - это заставить Activity реализовать Parcelable и создать файл AIDL, чтобы я мог передать его через удаленный интерфейс Сервиса. Хотя это кажется излишним, и я понятия не имею, как Activity должен реализовывать writeToParcel () / readFromParcel ().

Есть ли более простой или лучший способ? Спасибо за любую помощь.

РЕДАКТИРОВАТЬ:

Для тех, кто заинтересован в этом позже, есть пример кода от Google для обработки этого через AIDL в каталоге примеров: /apis/app/RemoteService.java

Ответы на вопрос(12)

Ваш ответ на вопрос