The answer actually lies in your own question - *IDL concept is borrowed from RPC or other remote method/function execution frameworks. The reason to choose IDL can vary, but they provide one important thing - they are and behave similar (including syntactically) to local function/method call. Just like a local method/function call does not return until it has completed neither does IDL or RPC.
That being said android tries to manage read/write ends to IDL sides (activity/service combo). So it can tell them when other disconnected or connected, so one end does not wait (recv) and other does not keep sending (return) - simple remote exception handling situation.
Consider if you really need remote service. If you just have one 'process' (maybe many activities tied to it), then you can simplify this a lot by using local service.