今天偶然看到了一个HandlerThread
就bing查了一下。
其实就是一个特殊的Thread。
之前用Thread,更新UI的时候,一般都是利用handler,post。
这个handler一般构造的就是直接new的,那么它所用的Looper和对应的消息队列,就应该是UI线程的。
如果在子线程里也想用handler的机制去处理消息的话(保证一个有序执行的消息队列),就要在Thread里自定义handler,而子线程里默认是没有looper和messageQueue的,所以子线程里需要looper.prepare。
补充:线程之所以要用handler一般是两个原因
1.主要是因为线程间的通信需要,例如子线程的网络通信之后,通知主线程更新UI。
2.某些时候,维持消息的队列,顺序执行
然后在最后,执行looper.loop(就开始循环这个消息泵了)。
而这个HandlerThread,就是一个本身就带有looper的thread
构造之后,start
然后在创建自己的handler的时候,把这个handlerThread的looper作为构造参数用上,就OK了,这个handler就是依靠在这个线程的消息队列上的。
另外一般在一些控件的处理上,还是要多注意,之前就有不少方法,由于在调用的时候,写在了线程里,各种提示我,UI更新必须在主线程执行这个错误。
所以实在不行的话,就用view.post这么执行了。。。。