# Handler & AsyncTask
2020-04-29 本文已影响0人
卡路fly
Handler
Looper、Handler、MessageQueue、Message
小工厂工厂生产线:
- Looper 发动机
- MessageQueue 传送带
- Message 商品
- Handler 工人
Handler与Thread线程如何关联
Looper属于某个线程,消息队列存贮在Looper,消息队列通过Looper与特定线程关联。Handler与Looper、MessageQueue关联,因此handler与Thread线程关联。
子线程如何创建Handler
子线程创建Looper,if looper为空,抛出异常,子线程没有调用Looper.prepare之前,该线程looper为空
new Thread() {
Handler handler = null;
public void run() {
// 1. 创建Looper,并绑定到ThreadLocal
Looper.prepare();
handler = new Handler();
// 2. 启动消息循环
Looper.loop();
}
}.starh();
AsyncTask
是Android封装好的Thread+Handler组合,基于异步消息处理机制,可以简单的从子线程切换主线程。
image.png image.png