和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、Handler 简介
二、Handler 消息处理机制原理
三、Handler 机制处理的4个关键对象
四、 Handler常用方法
五、子线程更新UI 异常处理
六、主线程给子线程发送消息的方法
七、主线程发送消息给子线程的例子
八、子线程给主线程发送消息的方法
九、 主、子 线程 互发消息方法
十、子线程方法中调用主线程更新UI的方法
十一、移除Handler 发送的消息方法
一、Handler 简介
在了解Handler 之前,我们需要先了解Handler的继承关系 继承关系如下:
java.lang.Object
↳ android.os.Handler
Handler
是 Android
中用来更新UI 的一套消息处理机制。Handler
允许线程间发送Message
或Runnable
对象进行通信。在Android
中UI修改只能通过UI Thread
,子线程不能更新UI
。如果子线程想更新UI
,需要通过 Handler
发送消息给主线程,进而达到更新UI
的目的。
二、Handler 消息处理机制原理
当Android
应用程序创建的时候,系统会给每一个进程提供一个Looper
,Looper
是一个死循环,它内部维护一个消息队列,Looper
不停的从消息队列中取Message
,取到的消息就发送给handler
,最后Handler
根据接收的消息去修改UI
等。
三、Handler 机制处理的4个关键对象
1.Message
线程之间传递的消息,可以携带一些简单的数据供子线程与主线程进行交换数据。
2.Message Queue
存放通过Handler
发送的Message
的消息队列,每一个线程只有一个消息队列。
3.Handler
消息处理者,主要用于发送跟处理消息。
主要功能:
发送消息SendMessage()
处理消息 HandleMessage()
4.Looper
内部包含一个死循环的MessageQueue
,用于存储handler
发送的Message
,Looper
则是不断的从消息队列中取消,如果有消息就取出发送给Handler
处理,没有则阻塞。
5.总结:
Handler
负责发送Message
到Message Queue
,Looper
负责从Message Queue
遍历Message
,然后直接把遍历的消息回传给Handler
自己,通过Handler
自身的handleMessage
处理更新UI
等操作。
主线程、子线程间通信简单流程
四、 Handler常用方法
1.Runnable对象
post(Runnable)
使用方法举例:
public void BtnRunnableMethod(View view) {
// 1.Runnable 对象
RunnableHandlderMethod();
}
/**
* Runnable 对象更新 UI
* **/
private Handler mRunnableHandler = new Handler();
public void RunnableHandlderMethod() {
new Thread() {
@Override
public void run() {
try {
Thread.sleep(1000);
mRunnableHandler.post(new Runnable() {
@Override
public void run() {
((Button) findViewB