700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android中Messenger进程间通信

Android中Messenger进程间通信

时间:2024-01-31 03:35:43

相关推荐

Android中Messenger进程间通信

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

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

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

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

服务端:

1.一般继承Service

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

private Messenger mMessenger = new Messenger(new Handler(){@Overridepublic void handleMessage(Message msgfromClient){//处理客户端的消息Message msgToClient = Message.obtain(msgfromClient);//返回给客户端的消息//...省略处理逻辑//将处理结果返回给客户端msgfromClient.replyTo.send(msgToClient);super.handleMessage(msgfromClient);}});

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

@Overridepublic IBinder onBind(Intent intent){return mMessenger.getBinder();}

客户端:

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

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

private Messenger mMessenger = new Messenger(new Handler(){@Overridepublic void handleMessage(Message msgFromServer){//... 处理服务器的消息,可做UI显示 super.handleMessage(msgFromServer);}});

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

private ServiceConnection mConn = new ServiceConnection(){@Overridepublic void onServiceConnected(ComponentName name, IBinder service){mService = new Messenger(service);isConn = true;}@Overridepublic void onServiceDisconnected(ComponentName name){mService = null;isConn = false;}};

4.向服务端发送消息

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。