安卓handler机制

本文深入解析安卓Handler机制,探讨其在子线程与主线程通信中的作用,以及如何避免UI错乱和主线程卡顿。同时,介绍了主线程在MessageQueue无消息时的阻塞式循环机制,解释了Linux pipe/epoll机制如何使主线程在等待消息时进入休眠状态,减少CPU资源消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     安卓自从设计之初,为了避免主线程卡顿的问题,禁止在主线程种进行网络请求;禁止在子线程更新ui,避免UI错乱。为了子线程、主线程间通信,设计了handler机制。handler机制是面试必考的科目,考察求职者理解深度、表达能力的,总结一下。

    借用的别人的图,表达的已经很详细了。

   补充一个阻塞式循环知识点:
主线程的死循环一直运行是不是特别消耗CPU资源呢? 其实不然,这里就涉及到Linux pipe/epoll机制,简单说就是在主线程的MessageQueue没有消息时,便阻塞在loop的queue.next()中的nativePollOnce()方法里,此时主线程会释放CPU资源进入休眠状态,直到下个消息到达或者有事务发生,通过往pipe管道写端写入数据来唤醒主线程工作。这里采用的epoll机制,是一种IO多路复用机制,可以同时监控多个描述符,当某个描述符就绪(读或写就绪),则立刻通知相应程序进行读或写操作,本质同步I/O,即读写是阻塞的。 所以说,主线程大多数时候都是处于休眠状态,并不会消耗大量CPU资源。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值