Android Handler机制的简单理解

Android Handler 机制的简单理解


简述

创建一个 Message 对象,然后借助 Handler 发送出去,之后在 Handler 的 handleMessage() 方法中获取刚才发送的 Message 对象。

在子线程更新 UI

  • Handler
  • Activity.runOnUiThread()
  • View.post(Runnable r)

Handler 主要由以下部分组成

Handler Handler 是一个消息辅助类,主要负责向消息池发送各种消息事件 Handler.sendMessage() 和处理相应的消息事件 Handler.handleMessage()。
Message Message 即消息,它能容纳任意数据,相当于一个信息载体。
MessageQueue MessageQueue 如其名,消息队列。它按时序将消息插入队列,最小的时间戳将被优先处理。
Looper Looper 负责从消息队列读取消息,然后分发给对应的 Handler 进行处理。它是一个死循环,不断地调用 MessageQueue.next() 去读取消息,在没有消息分发的时候会变成阻塞状态,在有消息可用时继续轮询。

Looper.prepare();
Handler mHandler = new Handler() {
   @Override
   public void handleMessage(Message msg) {
          Log.i(TAG, "在子线程中定义Handler,并接收到消息。。。");
   }
};
Looper.loop();
// 1. 创建 HandlerThread 并准备 Looper
handlerThread = new HandlerThread("myHandlerThread");
handlerThread.start();
// 2. 创建 Handler 并绑定 handlerThread 的 Looper
new Handler(handlerThread.getLooper()).post(new Runnable() {
    @Override 
    public void run() {
          // 注意:Handler 绑定了子线程的 Looper,这个方法也会运行在子线程,不可以更新 UI
          MLog.i("Handler in " + Thread.currentThread().getName());
    }
});
// 3. 退出
@Override public void onDestroy() {
    super.onDestroy();
    handlerThread.quit();
}
  • 使用 post 方法提交任务,postAtFrontOfQueue() 将任务加入到队列前端, postAtTime() 指定时间提交任务, postDelayed() 延后提交任务。
  • 使用 sendMessage() 方法可以发送消息,sendMessageAtFrontOfQueue() 将该消息放入消息队列前端,sendMessageAtTime() 指定时间发送消息, sendMessageDelayed() 延后提交消息。
HandlerThread 的 quit() 和 quitSafety() 区别

两个方法作用都是结束 Looper 的运行。它们的区别是:quit() 方法会直接移除 MessageQueue 中的所有消息,然后终止 MesseageQueue,而 quitSafety() 会将 MessageQueue 中已有的消息处理完成后(不再接收新消息)再终止 MessageQueue。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值