对Android消息机制Handler的理解

在Android的世界中,天然存在两种通信。一是不同进程间的通信(IPC),另一种是同一进程中线程之间的通信。今天这篇文章主要聊一下第二种方式。

做Andorid开发的都知道非UI线程不能更新UI,Android之所以会使用Handler消息机制是解决子线程不能更新UI的问题,避免子线程直接更新UI是为了提升UI的效率和安全性。

Handler消息机制涉及到几个重要组成部分,分别是Looper、MessageQueue、Message和Handler。其中Looper负责维护消息队列和进行消息循环,MessageQueue负责存储各个线程发送过来的消息,Message负责存储需要执行的操作和数据还有他的发送者,Handler是用来发送消息和处理自己发送的消息的。应用程序启动后在ActivityThread的main方法中会首先调用Looper.prepareMainLooper()初始化主线程的Looper和消息队列,Looper使用ThreadLocal保证每个线程拥有自己的Looper属性,主线程的Looper是不能调用quit()退出的。随后调用Looper.loop()进行消息循环,在其内部是通过for的死循环形式来不断的从队列中获取Message,调用queue.next()方法获取消息,这里使用了Linux的epoll机制,如果没有新消息会阻塞住,这也是为什么死循环没有过高占用CPU的原因,在有新消息到达的时候唤醒线程继续执行,如此便完成了APP内部高效的信息传递。

发表评论

电子邮件地址不会被公开。 必填项已用*标注