一、客户端代码
public class MessengerActivity extends Activity {
private Messenger mMessenger;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_messenger);
Intent intent=new Intent(MessengerActivity.this,MessengerService.class);
bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE);//绑定服务,获取连接
}
private ServiceConnection mServiceConnection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mMessenger=new Messenger(service);
Message mMessage=Message.obtain(null,MessengerService.MSG_FROMCLIENT);
Bundle mBundle=new Bundle();
mBundle.putString("msg","客户端发来的消息");
mMessage.replyTo=new Messenger(mHandler);
mMessage.setData(mBundle);
try {
mMessenger.send(mMessage);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(mServiceConnection);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MessengerService.MSG_FROMCLIENT:
Log.i(MessengerService.TAG, "收到服务端信息:" + msg.getData().get("rep"));
break;
}
}
};
}
二、服务端代码
public class MessengerService extends Service {
public static final String TAG = "MessengerService";
public static final int MSG_FROMCLIENT=9999;
@Override
public IBinder onBind(Intent intent) {
return new Messenger(mHandler).getBinder();
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_FROMCLIENT:
Log.i(TAG,"来自客户端的消息:"+msg.getData().get("msg"));
//得到客户端传来的Messenger对象
Messenger mMessenger=msg.replyTo;
Message mMessage=Message.obtain(null,MessengerService.MSG_FROMCLIENT);
Bundle mBundle=new Bundle();
mBundle.putString("Reply","这里是服务端,我们收到信息了");
mMessage.setData(mBundle);
try {
mMessenger.send(mMessage);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
}
}
};
}
注意:
Messenger将AIDL进行了封装,使用非常简单。
Messenger以串行的方式处理客户端发来的消息,不适合有大量并发的请求
Messenger方法只能传递消息,不能跨进程调用方法