Android_Handler Looper Message的关系

角色描述:

Message:消息对象,Message Queue中的存放的对象。

一个Message Queue中包含多个MessageMessage实例对象的取得,通常使用Message类里的静态方法obtainMessage();它的创建并不一定是直接创建一个新的实例,而是先从Message Pool(消息池)中看有没有可用的Message实例,存在则直接取出返回这个实例。如果Message Pool中没有可用的Message实例,则才用给定的参数创建一个Message对象。调用removeMessages()时,将MessageMessage Queue中删除,同时放入到Message Pool中。

Looper:是MessageQueue的管理者。

每一个MessageQueue都不能脱离Looper而存在。每一个Looper对象和一个线程关联。通过调用Looper.myLooper()可以获得当前线程的Looper对象。

Handler:消息的处理者。

handler负责将需要传递的信息封装成Message,消息通过handler对象的sendMessage()来将该条Message放入MessageQueue中。当Looper对象看到MessageQueue中含有Message,取出该条消息发送给handler,进而调用相应的handler对象的handleMessage()方法对其进行处理。

工作原理:

我们只要将最新的数据放到Handler所关联的LooperMessageQueue中,线程(UI线程或非UI线程)Looper一直在进行Loop操作从MessageQueue中读取符合要求的Message给属于它的target Handler来处理!所以啊,一旦有符合要求的Message,就第一时间将Message交给该Handler来处理!

简单一点说就是:

线程(UI线程或非UI线程)提供MessageQueueLooper从其中读Message,然后交由Message自己的Handler来处理!最终被Handler中的handlMessag(Message msg)方法处理!如下图所示:

Android_Handler Looper Message的关系_第1张图片

小结:

一个Looper对应一个MessageQueue

一个线程对应一个Looper

你可能感兴趣的:(Android_Handler Looper Message的关系)