I am trying to create a simple Android application that has a ActivityList of information, when the application starts, I plan to start a Service that will be constantly calculating the data (it will be changing) and I want the ActivityList to be in sync with the data that the service is calculating for the life of the app.
How can I set up my Activity to be listening to the Service? Is this the best way to approach this problem?
For example, if you imagine a list of stock prices - the data would be being changed regularly and need to be in sync with the (in my case) Service that is calculating/fetching the data constantly.
Thanks in advance
How can I set up my Activity to be listening to the Service? Is this the best way to approach this problem?
You have three major options, as I see it:
Polling. The Activity
periodically asks the Service
for the latest data. IMHO, this option sucks, but it's certainly possible.
Callbacks. Per jax's answer, the Activity
registers a callback object ("observer") with the Service
. The Service
invokes a method on the callback when the data changes, which in turn updates the UI. You can see an example of using that with a Service
here.
Broadcast Intents
. The Service
broadcasts an Intent
via sendBroadcast()
on a data change. The Activity
registers a BroadcastReceiver
using registerReceiver()
, and that BroadcastReceiver
is notified of an incoming broadcast. This triggers the Activity
to load the latest data from the Service
, or possibly just to get the latest data out of extras in the broadcast Intent
. You can see an example of using that technique with a Service
here.