Zostawiłem sprawę tak jak było, czyli w skrócie:
startService();
bindService();
registerCallback();
Poczytałem sobie o innych możliwościach, ale jakoś nie widziałem sensu korzystania z nich w mojej aplikacji.
Zależało mi na możliwości trwałego działania w tle procesu, który rejestruje trasę, wylicza statystyki, itd.
Opcjonalnie może zostać uruchomione activity, wyświetlające na bieżąco dane przekazane przez service.
Z tego co rozumiem, w przypadku użycia intencji, activity w razie braku istnienia, była by tworzona i wrzucana do foreground, co jest dla mnie działaniem niepożądanym.
W tej chwili bawię się kolejnym projektem, gdzie muszę użyć service, możliwe, że wypróbuję inne metody komunikowania się.