1. Looper 是运行在创建Handler所在的线程中的,这样一来Handler中的业务逻辑就可以切换到创建Handler所在的线程中去执行。也就是在哪个线程创建的Handler,回调就是在哪个线程中
2. 线程默认是没有Looper的,如果需要使用Handler就必须为线程创建Looper。主线程在创建时就会初始化Looper,这也是在主线程中默认可以使用Handler的原因。
Handler 的工作需要 Looper,没有 Looper 的线程就会报错,可以通过 Looper.prepare()为当前线程创建一个Looper,接着通过Looper.loop()来开启消息循环。
在子线程中使用Handler:
new Thread("Thread#2"){
@Override
public void run() {
Looper.prepare();
Handler handler = new Handler();
Looper.loop();
}}.start();
在子线程中,如果手动为其创建了 Looper ,那么在所有的事情完成以后应该调用 quit 方法来终止消息循环,否则这个子线程
就会一直处于等待的状态,而如果退出 Looper 以后,这个线程就会立刻终止,因此建议不需要的时候终止 Looper 。
3.每个线程有且有最多只能有一个Looper对象,它是一个ThreadLocal,ThreadLocal是Thread中的一个局部变量