handlemessageAndroid 请问Handler的sendMessage执行后是立即执行handleMessage方法吗?

handlemessage  时间:2021-06-11  阅读:()

安卓handler机制的原理!

andriod提供了 Handler 和 Looper 来满足线程间的通信。

Handler 先进先出原则。

Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。

1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。

2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。

3) Message Queue(消息队列):用来存放线程放入的消息。

4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

android中Handler这个方法super.handleMessage(msg) 是什么意思

android.os.Handler.java 中为空,实际啥也没做。

public void handleMessage(Message msg) { } 你应该是说你写的类XXXXHandler继承了android.os.Handler吧。

XXXXHandler里面重写的handleMessage里面调用super.handleMessage(msg),就是调用了上面的空函数。

Android的handler机制的原理?

Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。

这种机制通常用来处理相对耗时比较长的操作。

  一、Handler的定义:   主要接受子线程发送的数据, 并用此数据配合主线程更新UI。

  解释:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。

如果此时需要一个耗时的操作,例如: 联网读取数据, 或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭"。

这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的, 也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。

这个时候,Handler就出现了。

,来解决这个复杂的问题 ,由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。

  二、Handler一些特点   handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),它有两个作用:   (1)安排消息或Runnable 在某个主线程中某个地方执行;   (2)安排一个动作在不同的线程中执行。

  三、Handler实例   子类需要继承Hendler类,并重写handleMessage(Message msg) 方法, 用于接受线程数据。

handle是发出消息后就自动接收消息的吗?

我的理解: sendMessage(msg)和handleMessage(msg)分别在两个不同线程中,它们之间通过一个消息队列(MessageQueue)进行通信。

sendMessage(msg)是往队列插入数据 handleMessage(msg)是不断从队列中取出数据进行处理。

你说的是不是执行完sendMessage就立即调用handleMessage,这个不一定 handleMessage(msg)中一般都是比较耗时的操作(所以才要用多线程),sendMessage可能插入了100个数据,handleMessage才处理一个呢。

,如何吧这2个数据通过message发送给handle

private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); if (msg != null) { Log.d("debug", "msg.arg1=" + msg.arg1); Log.d("debug", "msg.arg2=" + msg.arg2); Bundle data = msg.getData(); int i = data.getInt("int"); ArrayList array = data.getStringArrayList("array"); } } };private void packHandler() { ArrayList array = new ArrayList(); array.add("a"); array.add("b"); array.add("c"); Message msg = new Message(); msg.arg1 = 1;//可以放一个int msg.arg2 = 2;//可以放一个int Bundle data = new Bundle(); data.putStringArrayList("array", array); data.putInt("int", 3);//可以放一个int msg.setData(data);//可以放ArrayList型 mHandler.sendMessage(msg); }

Android 请问Handler的sendMessage执行后是立即执行handleMessage方法吗?

在你写的代码里,Handler的sendMessage执行后是立即执行handleMessage方法的 调试运行没有问题是因为你一步步调试时需要时间的,而这个时间保证了你可能接收到全部数据了,然后调试到handler.sendMessage的时候,在handleMessage()里面就不会报空之类的错误,但是运行的时候在你数据还没接收到的时候就执行了handleMessage(),报错大概是这个原因吧

华纳云CN2高防1810M带宽独享,三网直cn218元/月,2M带宽;独服/高防6折购

华纳云怎么样?华纳云是香港老牌的IDC服务商,成立于2015年,主要提供中国香港/美国节点的服务器及网络安全产品、比如,香港服务器、香港云服务器、香港高防服务器、香港高防IP、美国云服务器、机柜出租以及云虚拟主机等。以极速 BGP 冗余网络、CN2 GIA 回国专线以及多年技能经验,帮助全球数十万家企业实现业务转型攀升。华纳云针对618返场活动,华纳云推出一系列热销产品活动,香港云服务器低至3折,...

racknerd新上架“洛杉矶”VPS$29/年,3.8G内存/3核/58gSSD/5T流量

racknerd发表了2021年美国独立日的促销费用便宜的vps,两种便宜的美国vps位于洛杉矶multacom室,访问了1Gbps的带宽,采用了solusvm管理,硬盘是SSDraid10...近两年来,racknerd的声誉不断积累,服务器的稳定性和售后服务。官方网站:https://www.racknerd.com多种加密数字货币、信用卡、PayPal、支付宝、银联、webmoney,可以付...

TNAHosting($5/月)4核/12GB/500GB/15TB/芝加哥机房

TNAHosting是一家成立于2012年的国外主机商,提供VPS主机及独立服务器租用等业务,其中VPS主机基于OpenVZ和KVM架构,数据中心在美国芝加哥机房。目前,商家在LET推出芝加哥机房大硬盘高配VPS套餐,再次刷新了价格底线,基于OpenVZ架构,12GB内存,500GB大硬盘,支持月付仅5美元起。下面列出这款VPS主机配置信息。CPU:4 cores内存:12GB硬盘:500GB月流...

handlemessage为你推荐
qq注册账号免费申请申请qq帐号免费申请身份证正反面图片身份证正反面照片。本人手持身份证照片。 银行卡正反面照片。 本人电话号码就能办信用卡真的吗印度尼西亚国家代码谁知道世界各国的国家电话代码?assemblyinfoCSE和CS有什么区别云计划云计划创富平台有谁了解啊 是骗人的吗?xcelsius谁有水晶易表2008的密钥?papertiger亚瑟士 艾斯克斯 tiger有什么区别吗网络备份如何自运远程备份微粒群算法多目标粒子群算法源程序web推送怎样关闭网页推送
荣耀欧洲 asp.net主机 namecheap mediafire omnis cloudstack mediafire下载 info域名 美国php空间 国内加速器 个人免费空间 hinet 美国堪萨斯 百度云加速 酸酸乳 测速电信 乐视会员免费领取 万网服务器 nnt 美国asp空间 更多