Handler 消息机制

写在前面:

Android为了解决线程间通信,提供了Handler机制方案。首先得了解以下关键词

  1. Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue()也就是消息队列。
  1. Handler:开发者构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里,或者接收Looper从MessageQueue取出。
  2. MessageQueue:用来存放message的队列。
  3. 线程:UI线程通常值得就是我们所说的Main Thread(主线程),而Android启动程序时会替它建立一个MessageQueue。

一、Handler发送消息:

在初始化Handler实例的时候,在Handler的构造中通过looper.myLooper()获取了当前线程保存的Looper实例,然后通过Looper实例获取了messageQueue,这里保证了Handler实例与Looper实例中的MessageQueue关联上了。

Handler的sendMessage()方法:Handler有三个sendXxx()方法,但是最终调用的是sendMessageAtTime(),在该方法内直接获取MessageQueue然后调用了enqueueMessage方法,以下是Handler发消息流程图

Handler 消息机制_第1张图片
handler_send.png

二、Handler处理消息:

Handler通过send的方法将带target的消息发送到MessageQueue中,然后UI线程通过Looper不断轮询MessageQueue中的message,将message取出后删除掉。

Handler 消息机制_第2张图片
handler_accecpt.png

写在最后:

在使用Handler作为内部类使用时,一定要注意使用static修饰(内部类会默认持有外部类引用),并且将当前Activity设为若引用,否则会发生内存泄露。

你可能感兴趣的:(Handler 消息机制)