I think what you want is here: http://codetheory.in/android-broadcast-receivers/
Asynchronous Processing
Generally after the execution of onReceive() of the receiver class is
finished, the Android system is allowed to recycle the receiver, i.e.,
another intent can be passed to it. For potentially long running
operations it is recommended to trigger a service instead on the
context object passed to it. This is a reason why any asynchronous
operation wasn’t allowed to perform till API level 11. But that has
changed now.
Since API 11, if you want to pass on the processing of some task in
another thread you could do something like this:
// Sample code from: http://stackoverflow.com/a/22741384
final PendingResult result = goAsync();
Thread thread = new Thread() {
public void run() {
int i;
// Do processing
result.setResultCode(i);
result.finish();
}
};
thread.start();
Using goAsync() we returned an object of the type PendingResult on
which calling the finish() method indicates the Android system that
the receiver is no more alive and can be recycled.
What he is saying here, is that your receiver is recycled AFTER it completes execution, meaning that you can receive one at a time, but you can receive many.
EDIT ON COMMENTS
I stand slightly corrected by a statement made by an Android Framework Engineer, Dianne Hackborn (https://groups.google.com/forum/#!topic/android-developers/ClIGNuGJUts):
A particular receiver can only process one broadcast at a time. As
each broadcast happens, it is processed to determine the targets it
should go to, and dispatched into the message queue for each target.
So it seems it does create a queue for you. Honestly I would not recommend relying too much on broadcasts, they are tricky in the best of times, and I have found Message Handlers FAR more reliable. But there are times when they are necessary.
I think the best option here is to actually go and try it and see for yourself what happens.