我看了半天HandlerThread也搞不懂它是干嘛的 我用handler和thread不也可以做吗 干嘛非要HandlerThread感觉反而更加麻烦了

解决方案 »

  1.   

     Android应用中的消息循环由Looper和Handler配合完成,Looper类用于封装消息循环,类中有个MessageQueue消息队列;Handler类封装了消息投递和消息处理等功能。系统默认情况下只有主线程(即UI线程)绑定Looper对象,因此在主线程中可以直接创建Handler的实例,但是在子线程中就不能直接new出Handler的实例了,因为子线程默认并没有Looper对象,此时会抛出RuntimeException异常;如果需要在子线程中使用Handler类,首先需要创建Looper类实例,这时可以通过Looper.prepare()和Looper.loop()函数来实现的。通过阅读Framework层源码发现,Android为我们提供了一个HandlerThread类,该类继承Thread类,并使用上面两个函数创建Looper对象,而且使用wait/notifyAll解决了多线程中子线程1获取子线程2的Looper对象为空的问题。这样便成功避免了上述的异常等问题。
    详见:http://tech.cncms.com/shouji/android/96016.html
      

  2.   

    其实。。我也没深入研究过。。但我看过AsyncTask和progressbar的源码,貌似都用到这个。。然后我发现AsyncTask已经能解决百分之九十九的问题了。。就不研究了
      

  3.   

    个人觉得1楼的答案已经指出关键了 HandlerThread“使用wait/notifyAll解决了多线程中子线程1获取子线程2的Looper对象为空的问题”虽然这种情况也许不常遇到,不过还是要注意一下。