天天看点

Android菜鸟的成长笔记(12)——Handler、Loop、MessageQueue

  当一个程序第一次启动时,Android会启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如按键事件、触屏事件、绘图事件,主线程也被称为UI线程。

UI的操作只能是通过主线程来操作,为了解决多线程操作UI的问题,就用到了Handler类。

一、Handler类

Handler类的作用有两个: 1、在新启动的线程中发送消息。 2、在主线程中获取、处理消息。 例如:

Message是Hander接收和处理的消息对象。通过向Message中添加消息,将消息放入消息队列MessageQueue,然后通过Looper方法读取MessageQueue。 打开Android系统源码可以看到:

程序创建时Looper会在它的构造器中创建MessageQueue对象。 handlerMessage方法位于主线程,可以处理UI.

二、Handler、Looper、MessageQueue的工作原理

Looper:每个线程只有一个Looper,负责管理MessageQueue,会不断地从MessageQueue中取出消息,并将消息分给对应的Handler处理。 MessageQueue:由Looper负责管理,采用先进先出的方式管理Message(消息队列). Handler:把消息发送给Looper管理的MessageQueue并负责处理Looper分给它的消息。 为了保证当前线程中有Looper对象,有如下两种情况: 1、主UI线程中,系统已经初始化了一个Looper对象,因此程序直接创建Handler即可。 2、自己定义的子线程,必须先创建一个Looper对象,并启动它。 例如:将上面的例子加以修改
Android菜鸟的成长笔记(12)——Handler、Loop、MessageQueue

继续阅读