关于更新UI

我们都知道android是不允许在子线程中进行UI操作的,但是有时候我们又必须在子线程中进行耗时任务,对此android提供了一套异步处理机制(Handle机制),解决了在子线程中进行UI操作的问题。
代码示例如下:private Handle handle=new Handle(){ public void handleMessage(Message msg){ switch(msg.what){ case UPDATE_UI: //在这里进行UI操作 break; default:break; } } }; public void onClick(View v){ switch(v.getId){ case R.id.ui: new Thread(new Runnable(){ public void run(){ Message message=new Message(); message.what=UPDATE_UI; handle.sendMessage(message); } }).start(); ......}}
首先我们新增Handle对象,并重写handleMessage(Message msg),在此方法中如果发现msg的what字段等于UPDATE_UI,就可以进行UI操作。而在UI的点击事件中,我们开启了一个线程:创建了Message对象,并将它的what字段设置为UPDATE_UI,并调用handle.sendMessage(message)将message发送出去。
总结:异步处理机制由Message、Handle、MessageQueue、Looper组成,Message是线程之间传递的消息(可通过what、arg1、arg2、Object),Handle是处理者,发送消息(sendMessage())和接收消息(handleMessage()),MessageQueue是消息队列,主要存放所有通过Handle发送的消息,Looper是MessageQueue的管家,每当发现MessageQueue存在一条消息,它就会将他取出并传递到Handle中。
当然还可以借助runOnUiThread来实现从子线程切换到主线程。

你可能感兴趣的:(关于更新UI)