background image

一个在新线程中使用

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(); }