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);

 

posted @ 2015-04-02 00:34  牧 天  阅读(1059)  评论(0)    收藏  举报