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

非常感谢楼上几位~

NameCheap 2021年新年首次活动 域名 域名邮局 SSL证书等

NameCheap商家如今发布促销活动也是有不小套路的,比如会在提前一周+的时间告诉你他们未来的活,比如这次2021年的首次活动就有在一周之前看到,但是这不等到他们中午一点左右的时候才有正式开始,而且我确实是有需要注册域名,等着看看是否有真的折扣,但是实际上.COM域名力度也就一般需要51元左右,其他地方也就55元左右。当然,这次新年的首次活动不管如何肯定是比平时便宜一点点的。有新注册域名、企业域...

RAKsmart:美国洛杉矶独服,E3处理器/16G/1TB,$76.77/月;美国/香港/日本/韩国站群服务器,自带5+253个IPv4

RAKsmart怎么样?RAKsmart机房即日起开始针对洛杉矶机房的独立服务器进行特别促销活动:低至$76.77/月,最低100Mbps带宽,最高10Gbps带宽,优化线路,不限制流量,具体包括有:常规服务器、站群服务器、10G大带宽服务器、整机机柜托管。活动截止6月30日结束。RAKsmart,美国华人老牌机房,专注于圣何塞服务器,有VPS、独立服务器等。支持PayPal、支付宝付款。点击直达...

Kinponet是谁?Kinponet前身公司叫金宝idc 成立于2013年 开始代理销售美国vps。

在2014年发现原来使用VPS的客户需求慢慢的在改版,VPS已经不能满足客户的需求。我们开始代理机房的独立服务器,主推和HS机房的独立服务器。经过一年多的发展,我们发现代理的服务器配置参差不齐,机房的售后服务也无法完全跟上,导致了很多问题发生,对使用体验带来了很多的不便,很多客户离开了我们。经过我们慎重的考虑和客户的建议。我们在2015开始了重大的改变, 2015年,我们开始计划托管自己...

handlerthread为你推荐
互联网舆情监控系统互联网舆情监控系统软硬件有哪些?averagesPoisson-Arrivals-See-Time-Averages是什么意思selectintooracle有select into临时表的用法吗微盟价格为什么这么多人用微盟,微盟都有哪些优势网页背景音乐代码网页背景音乐代码,我要哪怕转换网页都不间断的那种测试post软件测试的测试工作有哪些重要的步骤wap服务OPPO手机的WAP服务如何设定?listview的优化Android中的ListView,如何让每个Item背景色不同?validationgroupASP.NET 中如何判断ValidationGroup 一个组里的所有控件的值是否为空取英文名的网站取英文名字
老域名失效请用户记下 美国域名 adman 便宜域名 国外idc 私人服务器 godaddy支付宝 香港新世界电讯 typecho 免空 什么是刀片服务器 天翼云盘 免费dns解析 免费网页申请 华为云服务登录 yundun 国外的代理服务器 学生服务器 1美元 脚本大全 更多