.簡介

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

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

 

2.實(shí)現(xiàn)跨進(jìn)程通信

1)服務(wù)端進(jìn)程

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

2)客戶端進(jìn)程

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

 

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

3)下面直接貼上client和service的代碼,最后附上運(yùn)行結(jié)果。

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

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) {     &
        
		

網(wǎng)友評論