在android开发过程中相信屌丝程序员们都用过Handler来处理一些逻辑任务,比如发送延迟消息处理业务等逻辑,我们常用的图片加载缓存库ImageLoader和Picasso等内部也是通过Handler来最终有后台加载线程切换到主线程(UI线程)来更新页面的,今天就趁着离职有点儿时间就抽空的分析了下它的一点源码,在此总结出来。闲言少叙,书归正传!
先来谈谈Looper:
Looper从源码上来看就是一个普通的Java类,它在消息机制中,顾名思义,就是一个消息循环的角色。下面让我们看看Looper的构造器都做了什么:
//(每个Looper对象的)消息队列,也就是说每个Looper对象都持有自己的消息队列
final MessageQueue mQueue;
//(每个Looper线程关联的)当前线程
final Thread mThread;
private Looper(boolean quitAllowed) {
//初始化当前Looper对象的消息队列
mQueue = new MessageQueue(quitAllowed);
mThread = Thread.currentThread();//获取当前线程
}
从上面的代码中我们可以得出如下简单的结论:
a. <每个Looper对象都有自己的消息队列M