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(){@Overridepublic void run() {mHandler.sendMessage(mHandler.obtainMessage(1)); // 向主线程发送消息Log.i("synchronous", "sendMessage over!");}}.start();}});
然后在activity中(UI线程)定义handler:
Handler mHandler = new Handler(){@Overridepublic 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和新开启的线程之间是异步操作的。