If you use a singleton as a shared memory between a background service that I believe is performing operations on another thread, you may run into synchronization problems and read inconsistent data.
If the data in singleton is not synchronized, you should be careful because you rely on your βprotocolβ to make sure that no one is reading while your background thread is writing (which may lead to errors).
On the other hand, if it is synchronized, you run the risk of encountering anr error, because the activity that reads the data may be blocked, waiting for the completion of the service to write data in singleton mode.
As the other said, you should also keep in mind that your singleton can be freed if os needs resources and that your data may not be available.
I would rather use an event bus like otto or eventbus
EDIT:
Using a singleton point as an entry point into the background mode (intention) is an approach proposed in 2010 by Vergil Dobzanski talk about creating client applications for android relaxation.
In the proposed approach, there is one singleton, which acts as a controller of current requests. Please also note that a request for service intent is already queued using os, so you can drop several intentions that will be processed sequentially by the service of intent.
Some time ago, I also tried to use this as a starting point for a library that still remains incomplete. You can find sources here.
What I certainly would not do is to store your data in singleton mode. The approach I would prefer is to store the data in some persistent storage (e.g. sql / preferences / file / content provider) and inform the client about this change through a broadcast message (or, if you use a content provider, through an observer )
Finally, to some extent, this is an approach followed by the robospice library, which looks pretty mature and provides many interesting features like caching.