安卓中的Looper循环者

默认情况下,Android中新创建的线程是没有开启消息循环的,但是主线程除外。系统会自动为主线程创建Looper对象,开启消息循环。

所以,当在主线程中应用下面的代码创建Handler对象不会出错,而如果在新创建的非主线程中应用下面的代码创建Handler对象,将产生异常信息。

Handler handler = new Handler();
异常信息

Can't create handler inside thread that has not called Looper.prepare().

因此我们在非主线程中创建Hnadler对象,首先需要使用Looper类的prepare()方法来初始化一个Looper对象,然后创建该Looper对象,再使用Looper类的loop()方法启动Looper

,从消息队列中获取和处理消息。

	public class LooperThread extends Thread
	{
		@Override
		public void run() {
			// TODO Auto-generated method stub
			super.run();
			//初始化Looper对象
			Looper.prepare();
			handler = new Handler()
			{
				public void handleMessage(Message msg)
				{
					Log.i("开始任务", "123");
				}
			};
			msg = handler.obtainMessage();  //获取一个消息
			msg.what = 0x11;
			handler.sendMessage(msg);
			Looper.loop();       //启动Looper
			Log.i("线程退出", "123");
		}

	}
然后

	LooperThread looperthread = new LooperThread();
	LooperThread.start();

然而Looper.loop()之后的代码不会被执行,该函数内部是一个循环,当调用Handler.getLooper().quit()方法后,loop()方法才回终止,其后面的代码才能运行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值