这篇文章主要介绍了机器人句柄-消息的发送与处理案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
1、Handle,MessageQueue,Message类图
手柄:处理消息,并提供一系列函数帮忙我们创建消息和插入消息到消息队列中
创建handle实例--PbapClientConnectionHandler
mHandlerThread=新的处理程序线程(' PBAPPCE处理程序,进程。线程_优先级_后台);
mhandlerthread。start();
//将这个线程设置为消息处理尺蠖线程
mConnectionHandler=新的PbapClientConnectionHandler .构建器()。设置活套(mhandlerthread。get looper()).setContext(mService).setClientSM(pbapclientstatemachine。这个).setRemoteDevice(mCurrentDevice).build();
Looper作用:Looper的prepare函数将Looper和调用prepare的线程绑定在一起,调用线程调用loop函数处理来自该消息队列的消息。
机器人系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列和一个消息循环(活套),特定线程的消息只能分发给本线程,不能进行跨线程通讯。但是创建的工作线程默认是没有消息循环和消息队列的,如果想让该线程具有消息队列和消息循环,需要在线程中首先调用Looper.prepare()来创建消息队列,然后调用Looper.loop()进入消息循环
MessageQueue:消息队列,Handle和Looper中使用的是同一个消息队列
2、发送消息
3、处理消息
looper处理消息:
环使消息循环起作用,取消息,处理消息
/**
*在该线程中运行消息队列。一定要打电话
* {@link #quit()}结束循环。
*/
公共静态空的循环(){
最终Looper me=我的Looper();//返回保存在调用线程阈限值(阈值极限值)中的尺蠖对象
if (me==null) {
抛出新的运行时异常(“无循环;在此线程上未调用Looper.prepare().);
}
最终消息队列queue=me。mqueue//取得尺蠖对象的消息队列
//确保该线程的标识是本地进程的标识,
//并跟踪身份令牌实际是什么。
粘合剂。clearcallingidentity();
最终长标识=活页夹。clearcallingidentity();
for(;) {
消息msg=队列。next();//可能会阻止取消息队列中的一个待处理消息
if (msg==null) {
//没有消息表示消息队列正在退出。
返回;
}
//这必须在局部变量中,以防用户界面事件设置记录器
打印机日志=me.mLogging
如果(日志记录!=null) {
logging.println('分派到msg . target’)
味精。回调“:”消息。什么);
}
味精。目标。调度消息(msg);//调用该消息的手柄,交给它的调度消息函数处理
}
}
Handle -dispatchMessage
/**
*在此处理系统消息。
*/
公共作废调度消息(消息msg){
if (msg.callback!=null) {
//消息的回收不为空,则直接调用消息的回收来处理消息
处理回调(msg);
}否则{
if (mCallback!=null) {
//句柄的全局回收不为空
如果(麦考尔回来了。处理消息(msg)){
返回;
}
}
//调用处理子类的处理消息来处理消息
句柄消息(消息);
}
}
Message.callback用法:将Runnable当做一个Message
Runnable线程处理使用实例
mHandler.post(新的Runnable() {
@覆盖
公共无效运行(){
最终I活页夹b=回调。as binder();
});
}
到此这篇关于机器人句柄-消息的发送与处理案例详解的文章就介绍到这了,更多相关机器人句柄-消息内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。