Handler

handler是Android给我们提供来更新ui的一套机制,也是一套消息处理机制,他可以在线程之间进行通信。他常用的通信方式为在另外一个线程调用handler对象的sendMessage()方法,发送的是一个Message对象,Message为一个单链表结构,他里面维护了一个静态的message池,我们在使用此方法时,最好调用handler的obtain方法,因为在Looper处理完message之后会回收这个Message对象, 将他加入到这个消息池中,这个消息池的最大值为50个,当他不为饱和状态时,会一直回收已经执行完了的Message,这样就会造成不必要的内存占用。sendMessage最终会将消息入队在一个MessageQueue,MessageQueue存在于Looper这个类中,一个线程中只能存在一个Looper,消息的处理是在Looper的loop方法中进行的,他会无限循环来获取这个MessageQueue的next,当这个Message没有next的时候,会阻塞并等待新的消息,阻塞的原因是MessageQueue在执行next方法时,会去循环出队,当没有next的时候,回去调用native中的nativePollOnce()方法传入-1,会一直去阻塞这个队列的next方法,当阻塞时,直到有新的消息入队,才会去调用一个native中的方法nativeawake来唤醒队列,进而进行消息的出队
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值