Android中Handler消息处理概述

本文介绍了Android中的Handler消息处理机制,包括进程与线程的概念,以及如何在子线程中通过Handler安全地操作主线程组件。Handler、Message、Looper和MessageQueue的角色和使用方法也得到了详细阐述。

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

Handler消息传递机制:
Handler是Android中提供的一个消息处理机制。在任意线程中发送消息,在主线程中获取并处理消息。
进程:一个Android应用就是一个进程,每个应用在各自的进程中运行。
线程:比进程更小的独立运行的基本单位,一个进程可以包含多个线程。
在Android中线程是不安全的,子线程不允许操作主线程中的组件,可以通过Handler实现。

通过匿名内部类实例化一个Handler对象:

Handler handler = new Handler(){
	//重写handleMessage()这个方法来对接收到的消息进行处理
	@Override
	public void handleMessage(Message msg){
		super.handleMessage(msg);
	}
};

然后在子线程中发送消息:

//sendMessage()方法参数是一个Message对象
//这里使用发送空消息方法,参数是一个int类型的数,用来指定消息代码
handler.sendEmptyMessage();

然后继续回到主线程handleMessage方法,对收到的消息进行判断和处理:

//msg.what获取消息代码,判断是否与设置的消息代码一致
if(msg.what == *){
	//对消息进行处理
}

Message:
Message是线程之间传递的消息,可以携带少量的信息。是Handler接收和处理的对象。
一个线程对应一个Looper,一个Looper对应一个MessageQueue,这个MessageQueue存放多个Message。
首先创建一个Message,然后通过Handler发送给MessageQueue,Looper会将待处理的消息返回给Handler进行处理。
Message对象可以通过它的属性携带数据:
arg1和arg2属性用来存放整形数据,obj用来存放Object类型的任意对象,replyTo用来指定这个Message发送到哪里,what用来指定用户自定义的消息代码。
获取Message可通过Message.obtain()方法和Handler.obtainMessage()方法实现,这俩个方法可以避免分配新的对象,减少内存的开销。
Looper:
是一个循环器,主要负责管理MessageQueue,是一个消息队列,采用先进先出的原则管理消息。
Handler一般创建在主线程中,系统会自动创建Looper对象。
如果在子线程中创建Handler对象,需要手动创建Looper对象。通过Looper类提供的prepare()方法初始化Looper对象,通过new Handler()方法创建Handler对象,通过Looper类提供的loop()方法启动Looper。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值