一个在新线程中使用
handler 例子,我们来分析下源码
Java 代码
1
new Thread(new Runnable() { @Override public void run() {
2
Handler handler; //1、初始化 Looper
3
Looper.prepare(); //2、绑定 handler 到 CustomThread 实例的 Looper 对象、定义处理消
息的方法
4
handler= new Handler() { @Override public void handleMessage(Message msg) {
5
} };
6
// 3、发送消息 handler.sendMessage(new Message());
7
handler.post(new Runnable()) handler.obtainMessage(1, "hello").sendToTarget();
8
//4、启动消息循环 Looper.loop();
9
} }).start();
1 Java 代码
10
public static final void prepare() { if (sThreadLocal.get() != null) { // 每个线程,只能有
一个
Looper 对象
11
throw new RuntimeException("Only one Looper may be created per thread"); }
12
// 如 果 当 前 线 程 没 有 Looper , 新 建 一 个 , 构 造 函 数 是 private 的
sThreadLocal.set(new Looper());
13
} private Looper() {
14
mQueue = new MessageQueue(); // 建立消息队列 mRun = true;
15
mThread = Thread.currentThread(); }