1) Если сервис в том же процессе, то можно общаться на уровне инстансов. При биндинге активити получает ссылку на инстанс сервиса и дальше обычная жава.
2) Если сервис в другом процессе, то:
2.1) мессенжеры - при биндинге сервис и активити обмениваются мессенжерами и общаются.
2.2) AIDL - хитрая обертка над транзакциями через биндеры, по сути тоже биндинг, но, в отличие от мессенжеров, приближен к простому вызову методов.
Все способы выше работают в обе стороны.
Если биндинг не устраивает, то броадкастами.
Причем, если общающиеся в одном процессе, то лучше использовать LocalBroadcastManager, чтобы избежать всяческих дыр в безопасности.