android AsyncChannel机制 --- 异步消息分析
来源:互联网 发布:苹果系统切换windows 编辑:程序博客网 时间:2024/05/22 10:37
2 异步消息分析
客户端一般调用sendMessage方法发送异步消息,
sendMessage方法如下,
mClientAsyncChannel.sendMessage(MSG_ASYNC_REQ);
MSG_ASYNC_REQ是一个int值,
客户端的AsyncChannel对象的sendMessage方法如下,
public void sendMessage(int what) { Message msg = Message.obtain(); msg.what = what; sendMessage(msg);}
构造成一个消息,调用sendMessage发送给服务端, sendMessage方法如下,
public void sendMessage(Message msg) { msg.replyTo = mSrcMessenger; try { mDstMessenger.send(msg); } catch (RemoteException e) { replyDisconnected(STATUS_SEND_UNSUCCESSFUL); }}
mDstMessenger是指向服务端的Messenger对象,
mSrcMessenger是指向客户端的Messenger对象。这2个对象始终要搞清楚。
因此sendMessage方法首先将Message对象的replyTo对象设为客户端的Messenger对象,然后调用服务端的Messenger对象
发送该消息,也就是发送到服务端所在的包含服务端的Messenger对象的handler子线程,这一段话说起来拗口。
一般服务端的子线程的Handler的handleMessage处理该消息,一般格式如下,
case MSG_ASYNC_REQ: { Message reply = msg.obtain(); reply.what =MSG_ASYNC_REPLY; reply.obj = "•••"; //服务端发送给客户端的响应结果。 try { msg.replyTo.send(reply); } catch (RemoteException e) { } break;}
首先获取Message 的replyTo对象,在客户端的AsyncChannel中设置为客户端的Message对象,然后调用send方法发送到客户端。
客户端一般处理如下,
case MSG_ASYNC_REPLY: {String msg = (String) message.obj;//获取响应结果••• break;}
这样,消息流从客户端到服务端,最后又到了客户端。
单通道Message通信的本质就是:
客户端的AsyncChannel对象持有客户端和服务端的Message对象,通过Message对象的replyTo变量和send方法进行线程间的通信。
通信的示意图如下,
阅读全文
0 0
- android AsyncChannel机制 --- 异步消息分析
- android AsyncChannel机制 --- 同步消息分析
- Android 异步通道 -- AsyncChannel
- Android 异步通道 -- AsyncChannel
- Android AsyncChannel源码分析
- Android AsyncChannel源码分析
- Android AsyncChannel源码分析
- Android异步消息机制及源码分析
- android异步处理,分析Handle消息机制
- Android异步消息机制及源码分析
- Android源码分析-异步消息机制
- android AsyncChannel机制 --- 双通道连接
- Android异步消息机制
- Android 异步消息机制
- Android异步消息机制
- 异步消息机制源码分析
- 异步消息机制源码分析
- Android异步消息处理机制详解及源码分析
- 数论基础
- 一段好玩的python代码--随机生成圆
- 动态规划
- 并查集
- 关于java基本类型变量的思考
- android AsyncChannel机制 --- 异步消息分析
- JAVA,环境变量设置
- 面试算法题解—— 链表中环的入口节点
- 对前台传入的模糊查询字符串进行转义
- 【Java】阿里巴巴Java开发手册V1.2.0
- 在Android Stuido中使用Lint
- NDK 调用 so 时的异常问题解决
- 将字符串转变为大小写
- Android 调用系统的分享界面,进行文件分享