1.客户端service

public class MessageService extends Service {

private static final int MSG_SET_VALUE = 0x110;
private Handler mHandler = new Handler() {
public void handleMessage(Message msgFromClient) {
// 返回给客户的信息
Message msgToClient = Message.obtain(msgFromClient);
switch (msgFromClient.what) {
// msg 客户端传来的消息
case MSG_SET_VALUE:
try {
msgToClient.what = MSG_SET_VALUE;
SystemClock.sleep(2000);

msgToClient.arg2 = msgFromClient.arg1 + msgFromClient.arg2;
//msgFromClient.replyTo.send(msgToClient);

//得到客户端的信使对象,并向它发送消息
cMessenger = msgFromClient.replyTo;
cMessenger.send(msgToClient);

} catch (RemoteException e) {
e.printStackTrace();
}

break;

default:
break;
}
}
};
private Messenger mMessager = new Messenger(mHandler);
private Messenger cMessenger;

@Override
public IBinder onBind(Intent intent) {
return mMessager.getBinder();
}

@Override
public void onDestroy() {
cMessenger = null;
super.onDestroy();
}
}

2.服务器端service

public class MessageService extends Service {

private static final int MSG_SET_VALUE = 0x110;
private Handler mHandler = new Handler() {
public void handleMessage(Message msgFromClient) {
// 返回给客户的信息
Message msgToClient = Message.obtain(msgFromClient);
switch (msgFromClient.what) {
// msg 客户端传来的消息
case MSG_SET_VALUE:
try {
msgToClient.what = MSG_SET_VALUE;
SystemClock.sleep(2000);

msgToClient.arg2 = msgFromClient.arg1 + msgFromClient.arg2;
//msgFromClient.replyTo.send(msgToClient);

//得到客户端的信使对象,并向它发送消息
cMessenger = msgFromClient.replyTo;
cMessenger.send(msgToClient);

} catch (RemoteException e) {
e.printStackTrace();
}

break;

default:
break;
}
}
};
private Messenger mMessager = new Messenger(mHandler);
private Messenger cMessenger;

@Override
public IBinder onBind(Intent intent) {
return mMessager.getBinder();
}

@Override
public void onDestroy() {
cMessenger = null;
super.onDestroy();
}
}

3.客户端使用

public class MainActivity extends Activity {
private static final int MSG_SET_VALUE = 0x110;
private TextView mTVStatus; // 连接状态
private LinearLayout mLLContainer;// 用来添加接收到服务器返回的信息
private Messenger mService; // 客户端信使
private boolean isConnecting; // 是否连接
private Handler mHandler = new Handler() {
public void handleMessage(Message msgFromServer) {
switch (msgFromServer.what) {
case MSG_SET_VALUE:
TextView tv = (TextView) findViewById(msgFromServer.arg1);
tv.setText(tv.getText() + "==>" + msgFromServer.arg2);
break;
}
super.handleMessage(msgFromServer);
};
};
private Messenger mMessenger = new Messenger(mHandler);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTVStatus = (TextView) findViewById(R.id.tv_status);
mLLContainer = (LinearLayout) findViewById(R.id.ll_container);
}

int i = 0;
public void send(View view){
try {
int a = i++;
int b = (int) (Math.random() * 100);

//创建一个tv,添加到LinearLayout中
TextView tv = new TextView(MainActivity.this);
tv.setText(a + " + " + b + " = caculating ...");
tv.setId(a);

mLLContainer.addView(tv);

Message msgFromClient = Message.obtain(null, MSG_SET_VALUE, a, b);
msgFromClient.replyTo = mMessenger;
if (isConnecting) {
//往服务端发送消息
mService.send(msgFromClient);
}
} catch (RemoteException e) {
e.printStackTrace();
}
}

public void bind(View view) {
Intent service = new Intent();
service.setAction("android.intent.action.MESSAGE_SERVER");
bindService(service, conn, Context.BIND_AUTO_CREATE);
}

private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
isConnecting = false;
mTVStatus.setText("已断开连接!");
}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = new Messenger(service);
isConnecting = true;
mTVStatus.setText("连接成功!");
}
};

public void unbind(View view) {
unbindService(conn);
conn = null;
}

@Override
protected void onDestroy() {
unbindService(conn);
conn = null;
super.onDestroy();
}
}