如果在一个activity里面有多个线程去更新UI,并且都没有加锁机制,那就会造成更新UI错乱;而如果对更新UI的操作都进行加锁处理,就会造成性能下降。使用消息机制,就不必担心多线程的问题,因为更新UI 的操作,都是在主线程的消息队列当中去轮询处理的,即UI Thread更新UI。
- 更新UI界面(代码略)
- 自定义与线程相关的handler
在一个子线程中创建一个Handler,然后使用这个handler实例在其他任何线程中发送消息,最终处理消息的代码都会在你创建Handler实例的线程中运行。
示例代码如下:
public class Demo extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myThread=new MyThrread();
myThread.start();
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
myThread.mHandler.sendEmptyMessage(1);
}
class MyThread extends Thread{
private Handler mhandler;
@Override
public void run(){
super.run();
Looper.prepare();
mHandler=new Handler(){
@Override
public void HandleMessage(Message msg){
switch(msg.what){
case 1:
Log.d(TAG,"MMMMMM");
break;
}
}
};
Looper.loop();
}
}
}
3.定时器
如代码:
private static final int DISPLAY_TIME=3000;
new Handler().postDelayed(new Runnable(){
public void run(){
//代码块
}
},DISPLAY_TIME);
//关闭定时器
handler.removeCallbacks(runnable);
4. 拦截Handler传递的消息
只需要重写onHandleMesage()方法就可。