Alex Rivera | Logout

Android Broadcast Receiver vs Service

Asked 2013-01-27T15:33:10.657
85

I am trying to clarify the difference between a Broadcast Receiver and Service in android.

I understand that an activity can start a service by calling startService with an intent.

A broadcast receiver can be registered in code or the manifest and can be called with sendBroadcast.

When would you use one vs the other?

I understand that multiple broadcast receiver's can be listening for the same intent and this is NOT the case with a service.

Edit
Report

1 Answer

124

Services are meant to perform an action in the background for some period of time, regardless of what the user is doing in foreground (the user could be switching between activities). A good example would be a music player service - the user starts playing music through a music player app but when they exit the app the music keeps playing.

Services are also useful to provide/manage common access to a resource across multiple applications. This is often used for system resources, such as sensors.

Broadcast receivers are meant to respond to an intent (usually one sent by a service or a system event), do something, and be done. An example here might be the user touches an NFC-enabled phone to a tag, the system creates an intent for it, and a registered receiver handles it to change some settings (change volume, turn on bluetooth, etc).

When an intent is broadcast via sendBroadcast, it will be sent to all receivers that have matching intent filters. However, it is important to note that in API26+ most receivers registered in the manifest are no longer invoked in such situations, see the Google docs for more information.


Example 1: Suppose you want to expose a function (to be available from any application that wants to use it) that asks a website to calculate degrees of separation from Kevin Bacon.

Note that this example is "do something and return", as opposed to perform a long-running background operation.

You could implement this in several ways:

Create a library project that all users compile into their application.

  • There are now multiple copies of your code and they could all be different versions.
  • You could not batch or cache requests as each request is handled independently.

Create a broadc

answered 2013-01-27T15:47:17.163

Your Answer