十分钟了解Android Handler、Looper、Message

Android Handler、Looper、Message

在Android开发中,HandlerLooperMessage 是处理线程通信的核心类,特别是在需要更新UI或者从后台线程传递数据到主线程时。以下是它们的作用和使用方式。

1. Handler

Handler是Android中用于在不同线程之间发送和处理消息的类。它主要用于将任务调度到某个特定的线程的消息队列中执行,典型的应用场景是主线程(UI线程)中进行UI的更新。

主要功能

  • 发送消息 :通过sendMessage()post()方法将任务或数据发送到消息队列。
  • 处理消息 :重写handleMessage()方法,在此方法中处理收到的消息。
java 复制代码
Handler handler = new Handler(Looper.getMainLooper()) {
    @Override
    public void handleMessage(Message msg) {
        // 在这里处理消息
    }
};

// 发送消息
Message msg = Message.obtain();
msg.what = 1;
handler.sendMessage(msg);

// 发送任务
handler.post(() -> {
    // 在这里执行任务
});

2. Looper

Looper是Android中实现消息循环的类。它将消息放入一个队列中,并循环处理队列中的消息。每个线程(特别是UI线程)可以创建一个Looper对象,消息队列中的消息会被Looper持续处理,直到线程结束。

使用方法

  • 主线程(UI线程)默认已经有一个Looper对象。
  • 子线程需要调用Looper.prepare()来创建一个Looper,然后通过Looper.loop()开始消息循环。
java 复制代码
// 子线程的Looper
new Thread(() -> {
    Looper.prepare();  // 初始化Looper
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            // 处理子线程的消息
        }
    };
    Looper.loop();  // 开启消息循环
}).start();

3. Message

Message是Android中用于在线程间传递数据的类。它可以包含少量数据,用于传递给Handler进行处理。常用的字段包括whatarg1arg2obj

主要字段

  • what:用于消息的标识,可以是一个整型常量,用来区分不同类型的消息。
  • arg1arg2:消息中的附加数据。
  • obj:可以附带一个任意对象。
java 复制代码
// 子线程的Looper
new Thread(() -> {
    Looper.prepare();  // 初始化Looper
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            // 处理子线程的消息
        }
    };
    Looper.loop();  // 开启消息循环
}).start();

4. 关系

  • Looper:管理消息队列并循环处理消息。
  • Handler:发送和处理消息。
  • Message:包含数据,用于在线程间传递。
java 复制代码
Message msg = Message.obtain();
msg.what = 1; // 设置消息类型
msg.arg1 = 100;
msg.obj = "数据";
handler.sendMessage(msg);

总结

  • HandlerMessage 可以通过Looper在不同线程间传递数据。
  • 主线程默认有Looper,子线程需手动创建。
  • 使用Handler可以简化线程间通信和UI更新的逻辑。

参考

https://mayinjian.wordpress.com/2018/07/01/looper-handler/

相关推荐
松仔log6 小时前
Java中级——组合和继承
android·java·开发语言
我命由我1234510 小时前
Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
lilian23311 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_9557596211 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
余衫马11 小时前
2026最新版!Android Studio 极速安装与配置指南
android·ide·android studio
AFinalStone11 小时前
Android 7系统异常问题排查(五)Framework层(下)—System Server崩溃
android·tombstone·系统异常
AFinalStone11 小时前
Android 7系统异常问题排查(八)系统追踪—Trace机制与性能诊断
android·系统异常
极客猴子15 小时前
Android录音转写频繁卡顿?多款APP长时间会议场景稳定性实测
android·人工智能·智能手机·飞书
Kapaseker15 小时前
Boolean 变量到底该怎么命名?
android·kotlin
AFinalStone15 小时前
Android 7系统异常问题排查(六)应用异常(上)—ANR机制全解
android·系统异常