Android Handler的使用1

Android 中,一个线程对应一个Looper对象,一个Looper对象对应一个MessageQueue(消息队列),MessageQueue队列存放Message对象,存放的原则是先进先出。Looper对象用来开启一个消息循环。在默认的情况下,Android新建的线程是没有开启消息循环的,但是主线程除外。系统会自动为主线程创建Looper对象,在主线程中直接实例化Handler对象不会报错,但是在子线程中实例化就会报错。
会出现java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()的错误。那怎么才能在子线程中使用Handler呢?

首先要初始化Looper对象,然后就可以实例化Handler对象了,最后再启动Looper。

下面讲例子:

public class MainActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// Handler handler1 = new Handler();
		new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				Looper.prepare();// 初始化消息对象
				Handler handler2 = new Handler() {

					@Override
					public void handleMessage(Message msg) {
						// TODO Auto-generated method stub
						switch (msg.what) {
						case 1:
							Log.i("msg", String.valueOf(msg.arg1));// 打印出得到的消息
							break;

						}

						super.handleMessage(msg);
					}

				};
				Message msg = Message.obtain();
				msg.what = 1;
				msg.arg1 = 1234;
				handler2.sendMessage(msg);// 发送消息
				Looper.loop();// 启动消息
			}

		}).start();
	}

}


在上面的例子中实例化了一个子线程,并且在子线程中实例化了Handler对象并且发送了一条消息。

下一篇讲Handler在Android应用,子线程和UI主线程的交互。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值