Notify activity from service
Solution 1:
As Alex indicated, you can bind to the service and pass some sort of listener or callback to the service to use on events.
Or, you can use a broadcast Intent
, perhaps using methods like setPackage()
on the Intent
to limit the scope of the broadcast.
Or, you can use createPendingResult()
to create a PendingIntent
that you pass as an Intent
extra to the service -- the service can then use that PendingIntent
to trigger onActivityResult()
in your activity.
Or, you can use a ResultReceiver
.
Or, you can use a Messenger
.
(admittedly, I have not tried those latter two approaches, but I think they will work here)
Solution 2:
One more alternative: if your service updates content provider, activity can be notified via ContentObserver. This would be enough if your service downloads some data from server and you simply want to display fresh contents in the activity.
Solution 3:
Some ugly ways:
1.) If the activity has not started yet, then use intent
and startActivity
, but remember intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
2.) Otherwise if the activity has started already, you can write your own callback method in the activity and register the method in the service, then direct call the method in the service.
Hope to find some smart way.
I think broadcast also work well, you can write a static inner class for receive broadcast and start activity. But it is also ugly in my opinion.