知识点:
- UiThread 主线程
- Activity源码
final Handler mHandler = new Handler();
private Thread mUiThread;
// ...
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
// ...
}
-
Looper
作用:保持它的线程处于存活状态。
创建 Looper 的时候,会一并创建一个消息队列(该队列持有消息(Message)对象)。
注意点:
(1)线程默认没有 Looper;
(2)你可创建一个 Looper 并将它绑定到一个线程;
(3)每一个线程只能绑定一个 Looper; -
Message 消息
定义:消息对象实际上就是一系列指令。
如果我们希望一个 Runnable 在指定的线程运行,我们只需要将它放到一个消息里,并将这个消息放到对应线程的 Looper 消息队列就可以了!使用Handler实现。 -
Handler
定义、作用
两种构造方法、post() 方法 -
源码解释
这段代码是在主线程中执行,这意味着 mHandler 指向主线程的 Looper。是的,应用主线程是唯一一个默认绑定了 Looper 线程。所以当这一行代码执行的时候:mHandler.post(action); Handler 会创建一条持有我们传入的 Runnable 的消息,这条消息随后被添加到主线程的消息队列,然后等待 Handler 在它的Looper线程(主线程)中执行。