Android中的消息队列

本文介绍了在Android中使用消息队列的原因和方法,旨在解决子线程与主线程间的通信问题。通过创建Handler类并在主线程中实例化,重写handleMessage方法来处理来自子线程的消息,实现数据传递和UI更新。子线程中通过handler发送消息,利用msg.what进行条件判断处理。

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

如何在Android中使用消息队列

1.为什么要使用消息队列

  我们要把一些比较耗时的任务分配为一个线程完成,不然如果在UI线程内完成,过长时间完成不了则会出现问你等待还是关闭。用到线程就会带来一个问题,怎么进行子线程和主线程之间的通信。子线程把任务做完了怎么通知主线程,或者怎么把子线程完成的数据传回主线程。这就要使用消息队列。

2.怎么使用消息队列

  (1)在UI线程中声明并实例化一个Handler类,自己重写里面的handleMessage(Message msg)方法,这个方法运行在主线程,可以对主线程的控件进行操作。

	private Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			if(msg.what == 0){
				tv_num.setText(msg.arg1+"");
			}
		}
	};

   这个方法中有个参数msg,意思就是当有消息发送时就调用这个方法。可以根据msg.what来选择处理的方式

  (2)在子线程中用handler对象发送消息(handler.sendMessage(msg))

btn_count.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new Thread(){
					@Override
					public void run() {
						// TODO Auto-generated method stub
						for(int i = 0; i < 100; i++)
						{
							Message msg = new Message();
							msg.what = 0;
							msg.arg1 = i;
							handler.sendMessage(msg);
							try {
								Thread.sleep(1000);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
						}
					}
					
				}.start();
在这里使用了匿名类,我觉得这样很方便,因为这样类内部可以直接使用Activity中的handler对象,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值