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(); } }