When you talk about interprocess communication, everyone will think Aidl, in fact, Messenger and aidl function, can be used for inter-process communication. It is a message-based interprocess communication, just like a sub-thread and a UI thread sending a message, isn't it simple to write a aidl file, or is it a little cool? Ha ha.
In addition, it supports logging of client object Messenger, you can then implement a one-to-many communication, and even as a transfer point, any two processes can communicate through the server.
Compare with aidl :
when you need to perform IPC , it is easier to use Messenger for your interface than to use the Aidl implementation, because Messenger queues all service calls and pure aidl The interface sends multiple requests to the service at the same time, and the service must then deal with multithreading.
for most applications, the service does not need to perform multithreading, so use Messenger allows the service to process one call at a time. If your service must perform multithreading, you should use aidl to define the interface.
Next look at how to write:
Service side:
1. Create a handler object and implement the Hanlemessage method for receiving messages from the client and processing
2. Create a Messenger ( Messenger), package Handler
3.messenger creates a IBinder object that is returned to the client by Onbind
Client:
1. Binding Services in activity
2. Create serviceconnection and use ibinder to instantiate Messenger in it
3. use Messenger to send messages to the server
4. Unbind Service
5. receive each Message in the Handlemessage () method in the server
this way, the client does not invoke the "method" of the service. The message object, which is passed by the client, is received by the service in its Handler .
The above implementation is only one-way communication, that is, the client sends a message to the server, if I need the server to send a message to the client and how to do it?
In fact, this is also very easy to achieve, let us follow the above steps to achieve two-way communication bar
1. Create a Handler object in the client to handle messages sent from the service side
2. Create a client-side Messenger object and encapsulate the handler.
3. Assign the client Messenger object to the ReplyTo field of the message object to be sent
4. The client's messenger is parsed when the message is processed by the Handler on the server and a message is sent to the client using the client's Messenger object
This enables two-way communication between the client and the server.
Note: The Service must be open at the time of declaration, i.e. android:exported= "true"; In addition, I will use some test the APP's online automated test tool:www.ineice.com
Messenger of Android interprocess communication