Handler封装
Handler是Android消息模型最重要的一个概念,它可以说是Android消息模型的核心,对于Looper、MessageQueue、Message 等概念一般在应用中很少使用。在Android系统框架中也频繁地使用Handler,而且为了更方便地使用Handler,还把Handler进行了一些列的封装,下面就通过列举一些Handler的使用方法。
1)Acitivity的runOnUiThread方法
使用Acitivity的runOnUiThread方法执行代码时,可以保证所有的代码都在UI线程中执行,使用方法如下:
activity.runOnUiThread(new Runnable() { @Override public void run() { textView.setText("HelloWorld"); //所有的代码都会在UI线程中执行 } });
2)View的post和postDelay方法
View的post方法与Acitivity的runOnUiThread方法类似,可以保证所有的代码都在UI线程中执行,View的post方法使用方法如下:
view.post((new Runnable() { @Override public void run() { textView.setText("HelloWorld"); //所有的代码都会在UI线程中执行 } });
view.postDelay ((new Runnable() { @Override public void run() { textView.setText("HelloWorld"); //所有的代码都会在UI线程中执行 } }, 1000);// 延迟1秒执行
4) IdlerHandler
使用IdlerHandler可以向当前线程的消息队列里发送操作,这些操作之后在空闲的时候才会执行,它们的优先级非常低。需要注意的是queueIdle的方法可以返回一个布尔值,如果返回false,说明IdleHandler执行一次之后就会被删除,如果返回true,说明IdleHandler一直是有效的,只要系统处于空闲状态就执行IdleHandler的queueIdle方法。使用方式如下:
Looper.myQueue().addIdleHandler(new IdleHandler() { @Override public boolean queueIdle() { //系统空闲时进行资源回收操作 return false; } });
HandlerThread
HandlerThread是一个带有消息循环的线程,并且有自己的消息队列,能够接受其他线程发送消息。使用方法Java代码如下:
HandlerThread tt = new HandlerThread("handlerThread"); tt.start();//启动线程 Handler handler = new Handler(tt.getLooper()); handler.postDelayed(new Runnable() { @Override public void run() { System.out.println("ThreadName:" + Thread.currentThread().getName()); ((HandlerThread)Thread.currentThread()).getLooper().quit();//关闭消息循环,退出线程 } }, 1000);

浙公网安备 33010602011771号