Handler和Looper相关知识

# Handler和Looper相关知识 > author:licoba > > create time:2020/04/02 ## Handler的工作原理 Handler提供了一种机制,这种机制可以让我们在子线程中处理耗时的任务,在主线程中来更新UI Handler 工作流程包括 Handler、Looper、Message、MessageQueue 四个部分 1. Message:Message是在线程之间传递的消息,它可以在内部携带少量的数据,用于线程之间交换数据 2. Handler:它主要用于发送和处理消息的发送消息一般使用sendMessage()方法 3. MessageQueue:消息队列,它主要用于存放所有通过Handler发送的消息,这部分的消息会一直存在于消息队列中,等待被处理 4. Looper:每个线程通过Handler发送的消息都保存在MessageQueue中,每当Looper发现Message Queue中存在一条消息,就会调用looper()方法将它取出,并传递到Handler的handleMessage()方法中。 ## 一个线程可以有多少个handler,多少个looper? - 一个线程只能有一个looper与之绑定,looper持有messagequeue,所以也只能有一个messagequeue - 一个线程可以创建多个handler ## 怎么在子线程创建handler? 可以在子线程创建handler的。 1. 首先需要在子线程里先调用Looper.prepare() 2. new一个Handler 3. 在最后调用Looper.loop()方法 另外,在主线程可以直接使用Handler是因为ActivityThread帮我们自动初始化了looper,并在最后调用了Looper.loop方法 ## 既然一个looper可以对应多个handler,那么looper是怎么进行区分不同的handler的? handler在sendmessage的时候,会指定message31的target,也就是将当前的handler赋值给message对象,这样在handlermessage的时候,就可以根据不同的target来区分不同的handler。+