android Thread HandlerThread Looper Message MessageQueue Handler的关系

       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) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值