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

非常感谢楼上几位~

爱用云互联租用服务器租美国、日本、美国、日本、购买2天内不满意可以退换,IP可免费更换!

爱用云互联怎么样?爱用云是一家成立于2018年的老牌商家旗下的服务器销售品牌,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端服务部署,促使用户云端...

3G流量免费高防CDN 50-200G防御

简介酷盾安全怎么样?酷盾安全,隶属于云南酷番云计算有限公司,主要提供高防CDN服务,高防服务器等,分为中国境内CDN,和境外CDN和二个产品,均支持SSL。目前CDN处于内测阶段,目前是免费的,套餐包0.01一个。3G流量(高防CDN)用完了继续续费或者购买升级包即可。有兴趣的可以看看,需要实名的。官方网站: :点击进入官网云南酷番云计算有限公司优惠方案流量3G,用完了不够再次购买或者升级套餐流量...

Vultr VPS新增第18个数据中心 瑞典斯德哥尔摩欧洲VPS主机机房

前几天还在和做外贸业务的网友聊着有哪些欧洲机房的云服务器、VPS商家值得选择的。其中介绍他选择的还是我们熟悉的Vultr VPS服务商,拥有比较多达到17个数据中心,这不今天在登录VULTR商家的时候看到消息又新增一个新的机房。这算是第18个数据中心,也是欧洲VPS主机,地区是瑞典斯德哥尔摩。如果我们有需要欧洲机房的朋友现在就可以看到开通的机房中有可以选择瑞典机房。目前欧洲已经有五个机房可以选择,...

handlerthread为你推荐
财务系统软件财务管理软件是什么软件ae序列号ae序列号素数算法(c语言)求快速算素数的方法。youtube创始人比特币创始人到底是谁无处不在的意思,幸福无处不在,最适合才是最好是什么意思手机软件开发工具如何自己开发一个app软件刷ip流量请问刷流量刷IP有什么用的!webservice框架java Webservice都有哪几种方式啊,哪种方式比较好啊averagesPoisson-Arrivals-See-Time-Averages是什么意思微盟价格为什么这么多人用微盟,微盟都有哪些优势
国内域名注册 虚拟主机租用 虚拟主机评测 fc2最新域名 如何申请域名 187邮箱 bbr 免备案空间 美国主机代购 56折 国外空间服务商 qingyun 腾讯云分析 中国电信测速网 电信主机 日本代理ip 深圳主机托管 新网dns godaddyssl qq空间打开很慢 更多