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的操作。

非常感谢楼上几位~

HostKvm(4.25美)香港和俄罗斯高防机房云服务器

HostKvm 商家我们算是比较熟悉的国内商家,商家主要还是提供以亚洲数据中心,以及直连海外线路的服务商。这次商家有新增香港和俄罗斯两个机房的高防服务器方案。默认提供30GB防御,且目前半价优惠至4.25美元起步,其他方案的VPS主机还是正常的八折优惠。我们看看优惠活动。香港和俄罗斯半价优惠:2021fall,限购100台。通用优惠码:2021 ,八折优惠全部VPS。我们看看具体的套餐。1、香港高...

RackNerd:特价美国服务器促销,高配低价,美国多机房可选择,双E526**+AMD3700+NVMe

racknerd怎么样?racknerd今天发布了几款美国特价独立服务器的促销,本次商家主推高配置的服务器,各个配置给的都比较高,有Intel和AMD两种,硬盘也有NVMe和SSD等多咱组合可以选择,机房目前有夏洛特、洛杉矶、犹他州可以选择,性价比很高,有需要独服的朋友可以看看。点击进入:racknerd官方网站RackNerd暑假独服促销:CPU:双E5-2680v3 (24核心,48线程)内存...

hostkey荷兰/俄罗斯机房,GPU服务器

hostkey应该不用说大家都是比较熟悉的荷兰服务器品牌商家,主打荷兰、俄罗斯机房的独立服务器,包括常规服务器、AMD和Intel I9高频服务器、GPU服务器、高防服务器;当然,美国服务器也有,在纽约机房!官方网站:https://hostkey.com/gpu-dedicated-servers/比特币、信用卡、PayPal、支付宝、webmoney都可以付款!CPU类型AMD Ryzen9 ...

handlerthread为你推荐
互联网舆情监控系统最好的舆情监控软件dell服务器维修DELL的维修点在哪。谁知道?createfile失败惠普机看机提示create file fail 无法进桌面网络视频下载器谁能给我找个网络视频下载器和转换器?国家法规数据库食品及食用农产品标准法规信息支撑和综合应用平台/食品安全标准与技术法规动态比对数据库如何查询标准za是哪个国家的IE是哪个国家的缩写erp系统教程ERP系统怎样操作,有教学视频吗?在线沟通有效沟通的六个要点flushesno-show rate是什么pps官方网站什么叫PPS?是什么网站?
www二级域名 宿迁服务器租用 河北服务器租用 怎么申请域名 拜登买域名批特朗普 分销主机 kddi 网站被封 qingyun 789电视 老左来了 共享主机 流量计费 亚马逊香港官网 河南移动网 上海服务器 备案空间 主机管理系统 广州虚拟主机 创速 更多