首先来了解一下:UI线程,Handler,Message,Message Queue,Looper。
1. UI线程是程序主线程,界面的更新必须由主线程执行,如果执行一个超过5秒的任务程序将强制关闭并弹出dailog窗口显示强制关闭。
2. Handler是消息处理者,负责消息的发送与接收并处理,通过sendMessage(Message)函数发送消息,通过handleMessage(Message)函数接收消息并处理。
3. Message消息对象,此对象有 4个成员变量:arg1和arg2是整型, what用户定义的消息代码, obj接收任意类型的对象, 子线程通过handle.sendMessage(msg)函数发送消息对象。
4. Message Queue消息队列,用来存放通过Handler发布的消息,按照先进先出执行,每个message queue都会有一个对应的Handler。
5. Looper是每条线程里的Message Queue的管理者,Android会自动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。Looper会死循环取出Message Queue的非Null Message传递给Handler并设置此Message为Null。
(1). 当Handler对象的构造函数的参数为空,则为当前所在线程的Looper;
(2). Looper.getMainLooper()得到的是主线程的Looper对象,Looper.myLooper()得到的是当前线程的Looper对象。
Android在子线程更新UI的7种方法https://blog.csdn.net/qq_26287435/article/details/65448951
Message8种构造方法https://blog.csdn.net/dimudan2015/article/details/63250864
子线程创建消息队列并死循环监听提取消息
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare(); // 创建本线程的Looper并创建一个MessageQueue
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop(); // 开始运行Looper,监听Message Queue
}
}