一、几个关键概念
1、MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。
创建一个线程的时候,并不会自动创建其MessageQueue。通常使用一个 Looper 对象对该线程的MessageQueue进行管理。主线程创建时,会创建一
个默认的 Looper 对象,而 Looper 对象的创建,将自动创建一个 Message Queue 。其他非主线程,不会自动创建 Looper ,要需要的时候,通过调
用prepare函数来实现。
2、 Message :消息对象, Message Queue 中的存放的对象。一个 Message Queue 中包含多个 Message 。
Message 实例对象的取得,通常使用 Message 类里的静态方法obtain(),该方法有多个重载版本可供选择;它的创建并不一定是直接创建一个新的实例,
而是先从 Message Pool(消息池)中看有没有可用的 Message 实例,存在则直接取出返回这个实例。如果 Message Pool中没有可用的 Message 实例,
则才用给定的参数创建一个 Message 对象。调用removeMessages()时,将 Message 从 Message Queue 中删除,同时放入到 Message Pool中。除了上面这
种方式,也可以通过Handler对象的obtainMessage()获取一个 Message 实例。
3、 Looper :
是MessageQueue的管理者。每一个MessageQueue都不能脱离 Looper 而存在, Looper 对象的创建是通过prepare函数来实现的。同时每一个 Looper 对象
和一个线程关联。通过调用 Looper .myLooper()可以获得当前线程的 Looper 对象
创建一个 Looper 对象时,会同时创建一个MessageQueue对象。除了主线程有默认的 Looper ,其他线程默认是没有MessageQueue对象的,所以,不能
接受 Message 。如需要接受,自己定义一个 Looper 对象(通过prepare函数),这样该线程就有了自己的 Looper 对象和MessageQueue数据结构了。
Looper 从MessageQueue中取出 Message 然后,交由Handler的handleMessage进行处理。处理完成后,调用 Message .recycle()将其放入 Message Pool中。
4、Handler:
消息的处理者,handler负责将需要传递的信息封装成 Message ,通过调用handler对象的obtainMessage()来实现;
将消息传递给 Looper ,这是通过handler对象的sendMessage()来实现的。继而由 Looper 将 Message 放入MessageQueue中。
当 Looper 对象看到MessageQueue中含有 Message ,就将其广播出去。该handler对象收到该消息后,调用相应的handler对象的handleMessage()方法
对其进行处理。
1、MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。
创建一个线程的时候,并不会自动创建其MessageQueue。通常使用一个 Looper 对象对该线程的MessageQueue进行管理。主线程创建时,会创建一
个默认的 Looper 对象,而 Looper 对象的创建,将自动创建一个 Message Queue 。其他非主线程,不会自动创建 Looper ,要需要的时候,通过调
用prepare函数来实现。
2、 Message :消息对象, Message Queue 中的存放的对象。一个 Message Queue 中包含多个 Message 。
Message 实例对象的取得,通常使用 Message 类里的静态方法obtain(),该方法有多个重载版本可供选择;它的创建并不一定是直接创建一个新的实例,
而是先从 Message Pool(消息池)中看有没有可用的 Message 实例,存在则直接取出返回这个实例。如果 Message Pool中没有可用的 Message 实例,
则才用给定的参数创建一个 Message 对象。调用removeMessages()时,将 Message 从 Message Queue 中删除,同时放入到 Message Pool中。除了上面这
种方式,也可以通过Handler对象的obtainMessage()获取一个 Message 实例。
3、 Looper :
是MessageQueue的管理者。每一个MessageQueue都不能脱离 Looper 而存在, Looper 对象的创建是通过prepare函数来实现的。同时每一个 Looper 对象
和一个线程关联。通过调用 Looper .myLooper()可以获得当前线程的 Looper 对象
创建一个 Looper 对象时,会同时创建一个MessageQueue对象。除了主线程有默认的 Looper ,其他线程默认是没有MessageQueue对象的,所以,不能
接受 Message 。如需要接受,自己定义一个 Looper 对象(通过prepare函数),这样该线程就有了自己的 Looper 对象和MessageQueue数据结构了。
Looper 从MessageQueue中取出 Message 然后,交由Handler的handleMessage进行处理。处理完成后,调用 Message .recycle()将其放入 Message Pool中。
4、Handler:
消息的处理者,handler负责将需要传递的信息封装成 Message ,通过调用handler对象的obtainMessage()来实现;
将消息传递给 Looper ,这是通过handler对象的sendMessage()来实现的。继而由 Looper 将 Message 放入MessageQueue中。
当 Looper 对象看到MessageQueue中含有 Message ,就将其广播出去。该handler对象收到该消息后,调用相应的handler对象的handleMessage()方法
对其进行处理。