android消息机制

一、android的消息机制

 

QUI线程为什么设计为单线程?

A:对于多线程的UI操作,如果UI线程在刷新界面的同时,非UI线程也在刷新界面,这就会造成多个界面的刷新不能同步,导致线程不安全。

 

android消息机制包含三部分:Message HandlerLooper(MessageQueue);

Message: 消息的载体,由几种属性:targetcallbackarg1arg2whenwhatdataobjtarget为发送的目标、arg1arg2whatint型;whenlong型;databundleobjObject

 

Handler: 消息的处理者,负责消息的发送与处理

Q :由多个Handler时怎么确定不会互相干扰

A:在发送消息过程中,调用了enqueueMessage(queue,msg, uptimeMillis)这个方法,

privatebooleanenqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {

        msg.target = this;

        if (mAsynchronous) {

            msg.setAsynchronous(true);

        }

        return queue.enqueueMessage(msg,uptimeMillis);

    }

messagetarget设置了值,值为发送此消息的handler(这里为下面消息处理做好了一些准备工作,同时确保了消息由哪个handler发送,之后处理的时候也是那个handler处理)

 

Looper:在消息机制中Looper担当着消息的储存与转发的工作,它内部维护着一个消息队列MessageQueue,在实例化Looper的时候就会创建消息队列,一个线程中只能有一个Looper和一个消息队列。通过Loop.loop()不断从MessageQueue中查询消息。获取到了message之后loop方法中调用msg.target.dispatchMessage(msg),进行了转发工作。

 
Q
handler是怎么和MessageQueue建立的联系呢? 
A
:通过实例化handlerhandler中的mLoopermQueue mCallback 等赋初值,就将handlerMessageQueueLooper建立了联系。 

 

MessageQueue:存放消息队列

 

结构图:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值