www.zmzy.net > AnDroiD中的HAnDlEr详解以及和ThrEAD的区别

AnDroiD中的HAnDlEr详解以及和ThrEAD的区别

通俗的解释就是: thread处理handler发送过来的消息,每个thread都要有一个消息处理队列(messagequeue),用于存放handler发送过来的消息.thread为一个while(true)无限循环,每次从消息队列取出消息,并且回调handler的消息处理函数(handlermessage).

handler主要用于线程间通信,举一个常见的场景,在一个新开的thread中请求网络,等待网络请求成功后更新界面.此时,由于更新UI的操作不能在新开的thread中完成,需要handler发送消息到主线程中来执行.例如:new Thread(new

handler是android特有的机制,最大的好处就是实现了Activity主线程(就是UI主线程)和其他线程(自己定义的Thread)之间的数据通信.Timer和Thread是实现多线程的,而handler是实现线程间通信的,二者很大不同,关于handler的用法,参考baidu搜索

一、Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分

HandlerThread是继承Thread,主要的作用是建立了一个线程,并且创立了消息队列,有来自己的looper,可以让我们在自己的线程中分发和处理消息.android的消息处理通过handler和looper, HandlerThread不但能提供异步处理,Handler处理消息的方法也会在这个线程中执行,他最要的作用就是提供了一个线程.

android的asynctask类中使用自定义handler 熟知的asynctask就是thread+handler实现,但是这个handler并不能很好的被我们控制.在我的需求中希望在asynctask中使用自定义的handler,而且在必要的时候退出消息循环.实现思路如下:

首先this这个类实了runnable接口,run方法在thread.start()后自动被调用,这里是thread和runnable之音协定,这也是接口意义所在.由于是在子线程中操作的,子线程无法操作属于ui线程的权力,所以run方法走完后,需要通过handler发送消息在ui线程,完成ui的刷新.顺序是:new Thread(this).start();run()handler.sendMessage(m);handleMessage(Message msg)

android平台很多应用使用的都是asynctask,而并非thread和handler去更新ui,这里android123给大家说下他们到底有什么区别,我们平时应该使用哪种解决方案.从android 1.5开始系统将asynctask引入到android.os包中,过去在很早1.1和1.0

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

android平台很多应用使用的都是asynctask,而并非thread和handler去更新ui,这里android123给大家说下他们到底有什么区别,我们平时应该使用哪种解决方案.从android 1.5开始系统将asynctask引入到android.os包中,过去在很早1.1和1.0

网站地图

All rights reserved Powered by www.zmzy.net

copyright ©right 2010-2021。
www.zmzy.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com