Android 线程并发:线程通信:Handler机制

文章目录

API

Handler相关

Handler对象.sendMessage(Message)

发送消息

Handler对象.handleMessage()空方法

自定义Handler重写handleMessage方法,处理Message

Looper相关

Looper.getMainLooper()

获取App的UI线程的Looper对象

Looper.prepare()

创建Looper对象

Looper.loop()

开启死循环

Looper.myLooper()

获取当前线程的Looper对象

Looper.myQueue() /Looper对象.getQueue()

获取MessageQueue对象

Looper对象.getThread()

获取Thread对象

HandlerThread

HandlerThread对象.getLooper()

获取HandlerThread对象对应的Looper对象

源码分析

Looper、MessageQueue、Handler的类关系

一个Thread对应一个Looper
一个Looper对应一个MessageQueue
一个MessageQueue对应多个Handler

Handler负责

1.向MessageQueue添加Message
Handler.sendMessage
2.保存Message对应的处理代码
Handler.handleMessage()

MessageQueue负责存储Message
Looper负责死循环MessageQueue

从MessageQueue获取Message,在对应线程中执行Message对应的Handler保存的处理代码

Looper

持有一个ThreadLocal<Looper>的静态对象sThreadLocal,用于保证一个线程持有一个Looper对象
持有一个MessageQueue对象mQueue

HandlerThread

继承Thread, 重写run()方法

复制代码
public void run() {
    mTid = Process.myTid();
    Looper.prepare();
    synchronized (this) {
        mLooper = Looper.myLooper();
        notifyAll();
    }
    Process.setThreadPriority(mPriority);
    onLooperPrepared();
    Looper.loop();
    mTid = -1;
}

操作

自定义Thread实现Looper循环

复制代码
    Looper.prepare();
    Looper.loop();

创建Handler,绑定当前线程的Looper

复制代码
    new Handler();

创建Handler,绑定特定线程线程的Looper

复制代码
new Handler(Looper对象)

总结

相关推荐
_李小白14 分钟前
【Android UI开发】Android VideoView 使用介绍(一)
android·ui
Mr数据杨1 小时前
【Codex】用学生支持周报模块跟踪个性化支持进展
android·java·javascript·django·codex·项目开发
名剑走天下1 小时前
Android 面试题大全
android·kotlin
mmsx1 小时前
osmdroid 自定义地图视图:继承 MapView 的正确姿势与生命周期管理
android·osmdroid
ii_best3 小时前
移动开发工具按键精灵安卓版 OcrEx 识别总是漏字错字?改这一个参数,精度直接翻倍
android·ai编程·按键精灵
chjif3 小时前
Android 设备管控开发实战:自定义 Launcher 如何只显示指定 App?
android·kotlin
Dovis(誓平步青云)4 小时前
模拟器横评:电脑上看小说、追短剧用什么模拟器?MuMu、雷电、腾讯手游助手实测
android·java·服务器·前端·javascript·电脑
非凡ghost4 小时前
用 Kotlin 和 Jetpack Compose 重写的安卓视频播放器,原生体验有多流畅?
android·java·kotlin·音视频·软件需求
峥嵘life4 小时前
Android16 系统 APEX 模块调试总结
android·大数据·开发语言