I am curious to know why would you use Bound Service for 2 way interaction between Activity and Service when you can do the same kind of interaction with Started Service using local broadcasts and receivers defined in both Activity and Service
It will be helpful to know the pros and cons of each implementation.
I couldn't find any clear answer to this anywhere.
Using a bound Service
is much more flexible. You can define methods on the Service
(using AIDL) that return immediate results (synchronously), which you cannot do using LocalBroadcastManager
. Using LocalBroadcastManager
requires that you use your Service
in a completely asynchronous way. This decouples the initiation of a service action with the return of the results (callback) which can make your code more complicated and more difficult to understand. Asynchronous use has some benefits, and there are places where you should use it, but if you have a bound Service
you can choose exactly when to use synchronous calls and when to use asynchronous callbacks.
Also, the use of AIDL allows you to exactly describe the signatures of the services's method calls. If you use startService(Intent)
, you cannot guarantee that the caller will provide the correct arguments in the passed Intent
, so you need to rely on the caller to "do the right thing" and/or you need to add a lot of additional argument verification.
Don't forget the comment from @CommonsWare about how LocalBroadcastManager
only works if the Service
is running in the same OS process as the rest of your app (which makes it unsuitable for programming things like system services, which are not running in your OS process).