android Thread HandlerThread Looper Message MessageQueue Handler的关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuxinyl/article/details/6097560

       1,MessageQueue与Message的关系

Message中文是消息,及线程处理的最小单元,里面带有处理的数据集,或还带有操作,及告诉目的地要做什么事情,   每个MessageQueue里包含有Message。每个Message不是直接插入到MessageQueue里的,而是通过MessageQueue.IdleHandler 与looper一起工作,把Message放到MessageQueue里,及addIdleHandler(MessageQueue.IdleHandler handler) 和removeIdleHandler(MessageQueue.IdleHandler handler) 方法,把MessageQueue.IdleHandler压入到MessageQueu里。

 

        2,Thread和HandlerThread的关系

        HandlerThread就是带有Looper循环的Thread.

 

        3,Looper介绍

        Looper即一个循环,必须绑定到一个固定的线程里,通过getThread()方法可以获得该looper绑定的Thread对象,通过getMainLooper()获得主线程里的looper对象,myLooper()可以获得当前线程里的looper对象,通过myQueue()方法可以获得当前线程里的messageQueue对象。

       

        4,Thread、HandlerThread、和Looper的关系的关系

        一般声明一个thread是没有带looper循环的,但是可以通过Looper.prepare()方法给一个线程加上looper;Looper.loop()执行该looper绑定的线程里的messageQueue,直到该loopger结束;Loop.quit()结束该循环,实例代码如下:

  class LooperThread extends Thread {
      public Handler mHandler;
      
      public void run() {
          Looper.prepare();
          
          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };
          
          Looper.loop();
      }
  }
   幸好android为我们提供了一个直接生成带有looper线程的方法,及实例化一个HandlerThread对象,通过HandlerThread.getLooper()方法即可获得该HandlerThread的looper对象。
     5,Handler和Thread HandlerThread Looper Message MessageQueue的关系
       Handler类是用来发送和处理消息/Runnable的类,一个Handler类与唯一的一个线程关联,并且该线程是生成该Handler的线程,
它把消息发送到该生成它的线程里的MessageQueue里,然后当Message出队列的时候,就执行该消息。
 post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long),是用来处理runnable对象的;
 sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long), and sendMessageDelayed(Message, long)方法是
用来处理Message对象,一般是立即执行的,但是我们是可以设置时延,还可以循环执行。
可以通过handleMessage (Message msg) 方法来接收消息。
实例化:Handler(Looper looper) 

没有更多推荐了,返回首页