Messenger通信是基于AIDL的通信,即有服务端和客户端
1、服务器部分
public class MyService extends Service {
private static final String TAG = "MyService";
public MyService() {
}
private static class MyServiceHandler extends Handler{
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1: {
Log.d(TAG, "handleMessage: " + msg.getData().getString("msg"));
/**
* 服务器的回复
*/
Messenger client = msg.replyTo; //msg.replyTo获取Messenger
Message replyMessage = Message.obtain(null,2);
Bundle bundleForClient = new Bundle();
bundleForClient.putString("reply","get it");
replyMessage.setData(bundleForClient);
try {
client.send(replyMessage);
}catch (Exception e) {
e.printStackTrace();
}
//======================
break;
}
default:
super.handleMessage(msg);
}
}
}
private final Messenger messenger = new Messenger(new MyServiceHandler());
@Override
public IBinder onBind(Intent intent) {
return messenger.getBinder();
}
}
记得在AndroidManifest中在Service里加入下方来开启另一个进程(可以实现两个程序间通信)
android:process=":remote"
2、客户端部分
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private Messenger messengerSer;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
messengerSer = new Messenger(service);//Messenger用来发送Message
Message msg = Message.obtain(null,1);
//数据封装
Bundle data = new Bundle();
data.putString("msg","hello");
msg.setData(data);
/**
* 客户端发消息时,需要把接收服务器回复的Messenger通过Message的replyTo传递给服务器
*/
msg.replyTo = mGetReplyMessenger;
//======================
try{
messengerSer.send(msg);
}catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
/**
* 这里是收到服务器消息后的处理
*/
private static class MessengerHandlerToGetServiceHandler extends Handler{
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 2:
Log.d(TAG, "handleMessage: " + msg.getData().getString("reply"));
break;
default:
super.handleMessage(msg);
}
}
}
private Messenger mGetReplyMessenger = new Messenger(new MessengerHandlerToGetServiceHandler());
//=================
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button)findViewById(R.id.buttonS);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//通过bind来发送server
Intent intent = new Intent(MainActivity.this,MyService.class);
bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
}
});
}
@Override
protected void onDestroy() {
unbindService(serviceConnection);
super.onDestroy();
}
}