Handler消息处理机制

Android的Handler消息处理机制确保了UI线程的安全,避免多线程并发更新UI导致的混乱。Handler创建在主线程,负责接收来自子线程的消息,并通过Looper和MessageQueue协同工作。Looper是消息循环器,其死循环不会阻塞主线程,因为当无消息时,主线程会进入休眠状态。子线程需要通过Looper.prepare()和Looper.loop()来接收主线程的消息。AsyncTask是另一种异步加载方式,避免UI线程阻塞引发ANR问题。
摘要由CSDN通过智能技术生成

为什么要用消息处理机制 

        如果有多个线程更新UI,并且没有枷锁处理,会导致界面更新的错乱,而如果每个更新操作都进行枷锁处理,就会造成性能的下降,所以在Android开发中,为了使UI操作的线程是安全的,只允许主线程即UI线程可以更新UI组件。 
    我在平常开发中就会遇到多个线程并发操作UI组件的需求,Android提供了一条消息传递于处理机制来解决这个问题 

如何通信 

        首先Handler作为任务执行者,一般创建在主线程,当子线程有需要发送的数据,通过创建Message对象,使用handler对象将消息发送到message Queue,message queue遵循了队列先进先出的原则,当主线程Looper循环消息的时候,会按照message queue队列的顺序放入消息,并将消息给到任务执行者handler去执行任务 

通信原理 

        Handler创建完成后,内部的Looper以及MessageQueue就可以和handler一起协同工作,然后通过Handler的post方法将一个Runnable投递到handler内部的Looper中处理,也可以通过handler的send方法发送一个消息,这个消息会在Looper中处理,当handler的send方法被调用时,他会调用message Queue的enqueueMessage方法将这个消息放入消息队列中,然后Looper发现有新消息时,就会处理这个消息,最终消息中的Runnable或者handler

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值