服务端代码:
package com.minardwu.learnipc.learnservice.learnmessenger;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
public class MessengerService extends Service {
public MessengerService() {
}
//接收并返回消息
private final Messenger serviceMessenger = new Messenger(new ServiceHandler());
private static class ServiceHandler extends Handler{
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case 0:
System.out.println(msg.getData().getString("fromClient"));
Messenger serviceMessenger = msg.replyTo;
Message message = Message.obtain(null,1);
Bundle bundle = new Bundle();
bundle.putString("fromService","22222222222222222222222");
message.setData(bundle);
try {
serviceMessenger.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
default:
super.handleMessage(msg);
}
}
}
@Override
public IBinder onBind(Intent intent) {
return serviceMessenger.getBinder();
}
}
客户端代码:
package com.minardwu.learnipc.learnservice.learnmessenger;
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 com.minardwu.learnipc.R;
public class Main2Activity extends AppCompatActivity implements ServiceConnection {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
bindService(new Intent(Main2Activity.this,MessengerService.class),this, Context.BIND_AUTO_CREATE);
}
//向服务端发送消息
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Messenger messenger = new Messenger(service);
Message message = Message.obtain(null,0);
Bundle bundle = new Bundle();
bundle.putString("fromClient","11111111111111111111111");
message.setData(bundle);
message.replyTo = clientMessenger;//服务端要返回消息的根据
try {
messenger.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
//接受服务端消息
private Messenger clientMessenger = new Messenger(new ClientHandler());
private class ClientHandler extends Handler{
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 1:
System.out.println(msg.getData().getString("fromService"));
break;
default:
super.handleMessage(msg);
}
}
}
}