Each application in Android runs in its own process. For security reasons, an application cannot directly access the data of another application. However, a couple of mechanisms allow communication between applications. One such mechanism that you’ve seen throughout this book is Intents. Intents are asynchronous, meaning that you can post a message for someone to receive at some future point in time and just continue with your application.
Every once in a while we need a more direct, synchronous access to another process. There are many ways to implement this across process boundaries, and collectively they are called Interprocess Communication, or IPC for short.
To allow cross-application communication, Android provides its own version of an IPC protocol. One of the biggest challenges in IPC is passing data around, such as when passing parameters to method calls on the remote systems. IPC protocols tend to get complicated because they have to convert data from its in-memory format to a format that’s convenient for sending to another process. This is called marshaling, and the unpacking at the receiver is called unmarshaling.
To help with this, Android provides the Android Interface Definition Language, or AIDL. This lightweight implementation of IPC uses a syntax that is very familiar to Java developers, and there is a tool that automatically creates the hidden code required to connect a client and a remote service.
To illustrate ...