android中的handler是异步操作(测试后的结论)

在android工程中调用handler的sendMessage函数,是不是异步操作?我带着这样一个好奇的心做了一个测试。

 

在activity中添加一个按钮,并且添加它的事件,其中handler的sendMessage函数是在一个新开启的线程中执行:

Button btn = (Button)findViewById(R.id.btn1);
        btn.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				new Thread(){

					@Override
					public void run() {
						mHandler.sendMessage(mHandler.obtainMessage(1)); // 向主线程发送消息
						Log.i("synchronous", "sendMessage over!");
					}
					
				}.start();
			}
		});


然后在activity中(UI线程)定义handler:

Handler mHandler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			if (msg.what == 1){
				try {
					Thread.sleep(1000); // 主线程休息两秒钟
					Log.i("synchronous", "sleep over!");
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			super.handleMessage(msg);
		}
		
	};


程序启动,在模拟器中点击该按钮,Logcat中显示日志的先后顺序如下:

09-13 10:14:06.916: I/synchronous(636): sendMessage over!
09-13 10:14:08.043: I/synchronous(636): sleep over!

 

足以可见,handler的handleMessage和新开启的线程之间是异步操作的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值