I am no Android expert, but I have been developing an app with similar structure than yours. To accomplish it, I am using an actual long-running Service for the top-level background proccessing and data management which launchs different Threads to perform low-level computing and data acquisition.
For the communication threads->service, I am registering a BroadcastReceiver in the service and broadcasting information from the threads. To communicate service->activities I am just binding the service to the activity as described in "Extending the Binder class" in Android API Guide.
So the structure is like this: Activity --(bound)--> Service --(spawns multiple)--> Thread
You can get communication in top-down direction by directly calling public methods in the Service and Threads and down-top by broadcasting messages and receiving them in the Activity and Service.