前言
在Android开发中,多线程应用是非常频繁的,其中Handler机制随处可见.
下面就本人对Handle的一些理解与大家一起分享,共同回顾下Handle异步消息传递机制。
1.Handler是什么?
Handler是一套在 Android开发中 进行异步消息传递的机制。
2.Handler在Android中的作用
在Android开发中多线程的应用中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理。
3. 我们为什么要使用Handler去处理更新UI操作呢?
在多个线程并发更新UI的同时 保证线程安全。
4.Handler异步消息传递所涉及的相关概念
MainThread (主线程)UI线程,程序启动时自动创建。
工作线程,开发者自己开启的线程,执行耗时操作等。
Handler(处理者) UI线程与子线程通信的媒介,添加消息到消息队列(Message Queue)处理循环器分发过来的消息(Looper)。
Message (消息) Handler接受&处理的对象,存储需要操作的消息。
Message Queue(消息队列) 数据存储结构,采用先进先出方式,存储Handler发过来的消息。
Looper(循坏器)消息队列与处理者的媒介,从消息队列中循环取出消息并发送给Handler处理。
5.使用方式
Handler的使用方式 因发送消息到消息队列的方式不同而不同(两种)
使用Handler.sendMessage()、使用Handler.post()
1.使用 Handler.sendMessage()方式
/**
* 方式1:新建Handler子类(内部类)
*/
// 步骤1:自定义Handler子类(继承Handler类) & 复写handleMessage()方法
class mHandler extends Handler {
// 通过复写handlerMessage() 从而确定更新UI的操作
@Override
public void handleMessage(Message msg) {
...// 执行UI操作
}
}
// 步骤2:在主线程中创建Handler实例
private Handler mhandler = new mHandler();
// 步骤3:创建所需的消息对象
Message msg = Message.obtain(); // 实例化消息对象
msg.what = 1; // 消息标识
msg.obj = "AA"; // 消息内容存放
// 步骤4:在工作线程中