Android Handler消息机制(1)简单介绍和消息发送

226 阅读2分钟

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

概述

Handler在我们android开发中是一项非常重要的机制,Handler是android提供用于更新UI的一套机制,也是消息处理机制。Handler的主要作用有两个:

  1. 在启动的线程中发送消息
  2. 在主线程中获取并处理消息。

Android在设计的时候,就封装了一套消息创建,传递,处理机制,如果不遵循这样的机制,就没有办法更新UI信息的,就会抛出异常信息。因此必须要用Handler发送消息去更新UI。

要想理解Handler消息机制原理还需要了解几个概念:Handler、UI线程、Message、MessageQueue、Looper。

Handler: 发送处理消息。发送消息一般是使用Handler的sendMessager()方法。

UI线程: ActivityThread主线程**下篇文章我们进行详细的介绍。

Message: Handler请求和相应的消息,由MessageQueue进行管理。

MessageQueue: 消息队列,存放Message,先进先出,内部是单链表的结构。每个线程中只会有一个MessageQueue对象。

Looper: Lopper是每个线程中的的MessageQueue的管家,调用Looper的loop()方法后会进入一个无限循环中,每当发现MessageQueue中存在一条消息,就将他取出,并传递到Handler的handleMessage()方法中。每个县城中只有一个Looper对象。

基本使用

一般使用Handler发送消息需要两步,首先创建一个Handler对象,重写handleMessage方法。在需要消息通信的地方,通过Handler的sendMessage方法发送消息。

子线程中发送消息

// 创建一个子线程,在子线程中发送消息
new Thread(new Runnable() {
    @Override
    public void run() {
        Message msg = Message.obtain();
        msg.what = 1;
        msg.obj = "这是一个来自子线程的消息";
        // 2.发送消息
        mHandler.sendMessage(msg);
    }
}).start();
​

消息处理

Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        // 处理消息
        switch (msg.what) {
            case 1:
                // 打印出处理消息的线程名和Message.obj
                Log.e(TAG, "接收到消息: " + Thread.currentThread().getName() + ": "+ msg.obj);
                break;
            default:
                break;
        }
    }
};

现在对handler就有了简单的了解,下面的文章继续分析研究。