handlerthread请教关于android Thread和Handler的使用

handlerthread  时间:2021-06-19  阅读:()

Android 中Handler 如何通过Thread获得传来的数据?

先实例化一个Handler再重写handleMessage(Message msg)方法

msg.getData().getXXX()获得Thread线程发送的数据

简述android多线程机制

Handler对象与其调用者在同一线程中,如果在Handler中设置了延时操作,则调用线程也会堵塞。

每个Handler对象都会绑定一个Looper对象,每个Looper对象对应一个消息队列(MessageQueue)。

如果在创建Handler时不指定与其绑定的Looper对象,系统默认会将当前线程的Looper绑定到该Handler上。

在主线程中,可以直接使用newHandler()创建Handler对象,其将自动与主线程的Looper对象绑定;在非主线程中直接这样创建Handler则会报错,因为Android系统默认情况下非主线程中没有开启Looper,而Handler对象必须绑定Looper对象。

这种情况下,需先在该线程中手动开启Looper(Looper.prepare()-->Looper.loop()),然后将其绑定到Handler对象上;或者通过Looper.getMainLooper(),获得主线程的Looper,将其绑定到此Handler对象上。

Handler发送的消息都会加入到Looper的MessageQueue中。

一说Handler包含两个队列:线程队列和消息队列;使用Handler.post()可以将线程对象加入到线程队列中;使用Handler.sendMessage()可以将消息对象加入到消息队列中。

通过源码分析证实,Handler只有一个消息队列,即MessageQueue。

通过post()传进去的线程对象将会被封装成消息对象后传入MessageQueue。

使用post()将线程对象放到消息队列中后,当Looper轮询到该线程执行时,实际上并不会单独开启一个新线程,而仍然在当前Looper绑定的线程中执行,Handler只是调用了该线程对象的run()而已。

如,在子线程中定义了更新UI的指令,若直接开启将该线程执行,则会报错;而通过post()将其加入到主线程的Looper中并执行,就可以实现UI的更新。

使用sendMessage()将消息对象加入到消息队列后,当Looper轮询到该消息时,就会调用Handler的handleMessage()来对其进行处理。

再以更新UI为例,使用这种方法的话,就先将主线程的Looper绑定在Handler对象上,重载handleMessage()来处理UI更新,然后向其发送消息就可以了。

请教关于android Thread和Handler的使用

我那样的写法就是有问题的,不该把耗时的数据操作和handler撤上关系,耗时的操作就直接放new Thread()里面好了,这个新线程干完活了最后一步去发handler.sendMessage(message),告诉handler该做什么更新UI的工作,然后在Handler里面只有更新UI的操作。

非常感谢楼上几位~

轻云互联-618钜惠秒杀,香港CN2大宽带KVM架构云服务器月付22元,美国圣何塞精品云月付19元爆款!海量产品好货超值促销进行中!

官方网站:点击访问青云互联活动官网优惠码:终身88折扣优惠码:WN789-2021香港测试IP:154.196.254美国测试IP:243.164.1活动方案:用户购买任意全区域云服务器月付以上享受免费更换IP服务;限美国区域云服务器凡是购买均可以提交工单定制天机防火墙高防御保护端口以及保护模式;香港区域购买季度、半年付、年付周期均可免费申请额外1IP;使用优惠码购买后续费周期终身同活动价,价格不...

Sharktech$129/月,1Gbps不限流量,E5-2678v3(24核48线程)

Sharktech最近洛杉矶和丹佛低价配置大部分都无货了,只有荷兰机房还有少量库存,商家又提供了两款洛杉矶特价独立服务器,价格不错,CPU/内存/硬盘都是高配,1-10Gbps带宽不限流量最低129美元/月起。鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主...

CheapWindowsVPS$4.5/月,美国VPS/免费Windows系统/1Gbps不限流量/,可选美洲、欧洲、亚洲等8大机房

国外商家提供Windows系统的并不常见,CheapWindowsVPS 此次提供的 2 款 VPS 促销套餐,提供 5 折永久优惠码,优惠后月付 4.5 美元起,价格还是挺诱人的,VPS 不限流量,接入 1Gbps 带宽,8 个机房皆可选,其中洛杉矶机房还提供亚洲优化网络供选择,操作系统有 Windows 10 专业版、2012 R2、2016、Linux等。Cheap Windows VPS是...

handlerthread为你推荐
4k超高清视频下载为新手推荐几个获取4K片源的途径za是哪个国家的IE是哪个国家的缩写动画分镜头脚本动漫脚本和分镜头的区别?懂的进pass是什么在英语里pass是什么意思flushes翻譯下面的日記怎么保存整个网页怎样完整的保存一个网页pps官方网站什么叫PPS?是什么网站?455端口Xp系统455端口怎么禁用中国交通频道在线直播中国交通零距离是什么意思?wap服务wap是什么意思?
厦门域名注册 如何查询域名备案号 万网域名管理 韩国空间 香港机房托管 gateone 网站监控 免费静态空间 地址大全 52测评网 坐公交投2700元 架设服务器 电子邮件服务器 共享主机 cn3 免费高速空间 卡巴斯基免费试用 免费dns解析 能外链的相册 便宜空间 更多