Handler会关联一个单独的线程和消息队列。Handler默认关联主线程,虽然要提供Runnable参数,但默认是直接调用Runnable中的run()方法。也就是默认下会在主线程执行,如果在这里面的操作会有阻塞,界面也会卡住。如果要在其他线程执行,可以使用HandlerThread。
HandlerThread继承于Thread,所以它本质就是个Thread。与普通Thread的差别就在于,主要的作用是建立了一个线程,并且创立了消息队列,有来自己的looper,可以让我们在自己的线程中分发和处理消息。
private void test(){ HandlerThread handlerThread=new HandlerThread("test"); handlerThread.start(); handler=new Handler(handlerThread.getLooper()){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); try{ Thread.sleep(5000); ToastUtil.showLongToast(AddCarActivity.this,"启了个线程休眠,不影响主线程"); }catch (Exception ex){ } } }; }
private void test(){
HandlerThread handlerThread=newHandlerThread("test");
handlerThread.start();
handler=newHandler(){
@Override
public voidhandleMessage(Message msg) {
super.handleMessage(msg);
try{
Thread.sleep(5000);
ToastUtil.showLongToast(AddCarActivity.this,"界面会卡屏");
}catch(Exceptionex){
}
}
};}