handler的post方法是在主线程中运行的,并没有另外开一个线程,而handlerThread可以另外开一个线程并且实现循环。为什么还会有post方法。为什么不直接使用Thread或Runnable的start方法。

解决方案 »

  1.   

    直接使用Thread或Runnable的start方法会新开一个线程,使用post只是把run中的代码放到主线程中去执行。
      

  2.   

      主线程中有一个Looper循环分发消息。当你在主线程中实例化一个Handler的时候,可以通过它的构造函数传递一个你自己创建的Looper,也可以使用所在线程的Looper。然后,你使用Handler的post方法发消息的时候,消息就被发送到创建Handler时所关联的那个Looper中了。而HandlerThread的目的是在一个新的线程中创建了一个Looper,和主线程中的Looper毫不相干,这样,你就可以用HandlerThread创建的Looper来实例化Handler对象了,这时候,你发到消息就跑到新线程的Looper中了。这种情况特别适合后台处理消息的情况。
      

  3.   

    另外,Runnable接口没有start方法。只有Thread才有start方法。
      

  4.   

    post的执行体(比如一个runnable),是运行在主线程的,可是post这个函数调用,是可以在工作线程的。
      

  5.   

    请问有没有使用HandlerThread、handler、Looper实现循环的代码。谢
      

  6.   

    参考 Android之Handler 
    http://wenku.baidu.com/view/0c4bac671ed9ad51f01df27a.html
      

  7.   

    支持2楼和3楼,消息的封装是每个消息都对应着自己的handler,1、调用消息的callback 2、调用handler的callback,3、调用handler的handleMessage ;handleThread从线程继承而来,调用时新起了个线程,post是将Runnable直接赋值给了消息的callback,在调用消息的callback时直接调用了run方法,没有新起线程