日常学习Android-Handler

今天偶然看到了一个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这么执行了。。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值