Android线程机制Handler

本文深入解析Android中的线程机制,重点讲解Handler、Looper、MessageQueue和Message之间的关系,以及如何通过Handler实现主线程与工作线程间的通信。通过实例演示,帮助开发者掌握Android多线程环境下UI更新的正确方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Handler是什么?
Handler是一套更新UI的机制,也是一套消息处理机制。
android的主线程(界面线程)和work线程机制可以避免多线程导致线程并发的带来的混乱问题,而Handler在线程通信中起到了至关重要的作用。

二、Handler、Looper、MessageQueue、Message关系:(线程机制中各要素的关系)
handler先跟默认线程的looper关联,将message传送给looper的messageQueue中,然后通过looper.loop方法不断将messageQueue中的message直接回传给handler的handlerMessage方法进行处理,而handleMessage方法是在ui线程中执行了。

三、主线程和子线程通过handler进行通信:

1、实例化一个HandlerThread对象(HandlerThread类很好的避免了多线程并发使得threadHandler在于线程looper关联时,looper为空的情况。),使得子线程threadHandler能够与当前线程的looper进行关联,在子线程的handler的handleMessage方法中处理由主线程handlerMessage方法中自己发给自己的逻辑,而在该handleMessage方法中打印当前线程会发现是在子线程中执行的。

 

 

2、下图是主线程的handler,在handleMessage方法中通过子线程threadHandler发给子线程自己需要处理的消息:


简单讲就是主线程通过子线程中实例化的threadHandler给子线程发送消息,从而实现了主线程与工作线程的通信。

 

四、Handler常见问题

常见问题:

1、工作线程中handler实例化会出现looper空指针的异常,因为没有实例化looper

2、在非UI线程中执行了ui操作报异常

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值