单线程模型中Message、Handler、Message Queue、Looper之间的关系
1、Message
Message即为消息,可以理解为线程间交流的信息。处理数据后台线程需要更新UI,你可以发送Message内含一些数据给UI线程。
2、Handler
Handler 即为处理者,是Message的主要处理者,负责Message的发送,Message内容的执行处理。 后台线程就是通过传进来的Handler对象引用来sendMessage(Message)。而使用Handler,需要implement该类的handleMessage(Message) 方法。
3、Message Queue
Message Queue即为消息队列,用来存放通过Handler发布的消息,按照先进先出原则执行。 每个Message Queue都会有一个对应的Handler。Handler会向Message Queue通过两种方法发送消息: sendMessage 或 post。这两种消息都会插在Message Queue队尾并按照先进先出原则执行。 但通过这两种方法发送的消息执行的方式略有不同: 通过sendMessage发送的是一个Message对象,会被Handler的handleMessage()方法处理; 而通过post方法发送的是一个Runnable对象,则会自己执行。
4、Looper
Looper是每条线程里Message Queue的管家。 Android没有Global 的Message Queue,而Android 会自动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。 所以调用Looper.getMainLooper()得到的主线程的Looper不为Null, 但调用Looper.myLooper()得到当前线程的Looper就有可能为Null。
借用一下别人的一个流程图。