当前位置:   article > 正文

Android中Messenger进程间通信_android messenger 进程通信 !!! failed binder transacti

android messenger 进程通信 !!! failed binder transaction !!!

基于消息的进程间通信的方式,不需要编写aidl文件,使用更加简单方便。

客户端和服务端都用Messenger来发送数据,用Handler来处理数据。Messenger处理数据依靠Handler,所以是串行的,也就是说,Handler接到多个message时,就要排队依次处理。

可实现一对多的通信,甚至可以作为一个转接处,任意两个进程都能通过服务端进行通信。

通信实例,一般通过两个apk程序演示,一个apk是Server端,一个是Client端。

服务端:

1.一般继承Service

2.需要去声明一个Messenger对象mMessenger,参数为Handler,要实现Handler的handleMessage方法

  1. private Messenger mMessenger = new Messenger(new Handler(){
  2. @Override
  3. public void handleMessage(Message msgfromClient){
  4. //处理客户端的消息
  5. Message msgToClient = Message.obtain(msgfromClient);//返回给客户端的消息
  6. //...省略处理逻辑
  7. //将处理结果返回给客户端
  8. msgfromClient.replyTo.send(msgToClient);
  9. super.handleMessage(msgfromClient);
  10. }
  11. });

3.Service的onBind方法返回mMessenger.getBinder()

  1. @Override
  2. public IBinder onBind(Intent intent){
  3. return mMessenger.getBinder();
  4. }

客户端:

1.一般是Activity,因为要以bindService(intent, mConn, Context.BIND_AUTO_CREATE)连接远程服务

2.有两个Messenger对象,一个(mMessenger)用以处理接收到的服务端的消息,一个(mService)是服务端对象

  1. private Messenger mMessenger = new Messenger(new Handler(){
  2. @Override
  3. public void handleMessage(Message msgFromServer){
  4. //... 处理服务器的消息,可做UI显示
  5. super.handleMessage(msgFromServer);
  6. }
  7. });

3.首先bindService,然后在onServiceConnected中拿到回调的service(IBinder)对象,通过service对象去构造一个mService = new Messenger(service);然后就可以使用mService.send(msg)给服务端了

  1. private ServiceConnection mConn = new ServiceConnection(){
  2. @Override
  3. public void onServiceConnected(ComponentName name, IBinder service){
  4. mService = new Messenger(service);
  5. isConn = true;
  6. }
  7. @Override
  8. public void onServiceDisconnected(ComponentName name){
  9. mService = null;
  10. isConn = false;
  11. }
  12. };

4.向服务端发送消息

  1. Message msgFromClient = Message.obtain();
  2. msgFromClient.replyTo = mMessenger;
  3. mService.send(msgFromClient);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/122606
推荐阅读
相关标签
  

闽ICP备14008679号