.簡(jiǎn)介

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

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

 

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

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

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

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

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

 

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

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

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(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)友評(píng)論