.簡介

Messenger,顧名思義即為信使,通過它可以在不同進程中傳遞Message對象,通過在Message中放入我們需要的入局,就可以輕松實現(xiàn)數(shù)據(jù)的跨進程傳遞了。Messenger是一種輕量級的IPC方案,其底層實現(xiàn)是AIDL。

Messenger的使用方法很簡單,它對AIDL進程了封裝,并且由于它一次只處理一個請求,因此在服務端我們不需要考慮同步的問題。

 

2.實現(xiàn)跨進程通信

1)服務端進程

首先我們需要在服務端創(chuàng)建一個Service來處理客戶端的連接請求,同時創(chuàng)建一個Handler并通過它來創(chuàng)建一個Messenger對象。然后在Service的onBind方法中返回這Messenger對象底層的Binder即可。

2)客戶端進程

客戶端進程中,首先需要綁定服務端的Service,綁定成功后用服務端返回的IBinder對象創(chuàng)建一個Messenger,并通過這個Messenger對象向服務端發(fā)送Message。此外,如果需要服務端響應客戶端,我們就需要像服務端那樣創(chuàng)建一個Handler并創(chuàng)建一個新的Messenger,并把這個Messenger對象通過Message的replyTo參數(shù)傳遞給服務器,服務器就可以通過這個replyTo參數(shù)回應客戶端了。

 

     Messenger由于是在AIDL上進行了封裝,其使用過程相對比較簡單,下面的示例實現(xiàn)了客戶端發(fā)送消息給服務端,服務端會根據(jù)客戶端發(fā)送的消息予以回復并將回復的結果顯示在客戶端上。

3)下面直接貼上client和service的代碼,最后附上運行結果。

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

Client:package com.pignet.messengerdemo2;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.os.Messenger;import android.os.RemoteException;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity {    private  static  TextView tvMsgFromService;
    Button btnSend;
    EditText etClient;    private Messenger mService;    private Messenger mGetReplyFromService =new Messenger(new MessengerHandler());    private static class MessengerHandler extends Handler{
        @Override        public void handleMessage(Message msg) {     &