android消息处理机制之handler

android消息处理机制之handler

ID:30767000

大小:227.72 KB

页数:19页

时间:2019-01-03

android消息处理机制之handler_第1页
android消息处理机制之handler_第2页
android消息处理机制之handler_第3页
android消息处理机制之handler_第4页
android消息处理机制之handler_第5页
资源描述:

《android消息处理机制之handler》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、消息传递机制之Handler使用总结一.Handler基础知识Handler消息处理机制是一个功能强大的数据传递机制,主要功能是用来把子线程的数据传递给主线程,让主线程进行UI操作。android的消息处理有三个核心类:Looper,Handler和Message<>其实还有一个MessageQueue(消息队列),但是MQ被圭寸装到Looper里面了,我们不会直接与MessageQueue打交道,因此我没将其作为核心类。下面一一介绍:(一)线程的魔法师LooperLooper的字面意思是“循环者”,它被设计用来使一个普通线程变成L

2、ooper线程。所谓Looper线程就是循环工作的线程。在程序开发中(尤其是GUI开发中),我们经常会需要一个线程不断循环,一旦有新任务则执行,执行完继续等待下一个任务,这就是Looper线程。使用Looper类创建Looper线程很简单:publicclassLooperThreadextendsThread{@0verride3.publicvoidrun(){//将当前线程初始化为Looper线程Looper,prepare();//...其他处理,如实例化handler//开始循环处理消息队列Looper,loop();}}

3、通过上面两行核心代码,你的线程就升级为Looper线程了!在主线程中,上面这两个Looper的方法,系统已经帮我们做好了,直接实例化Handler对象就可以使用了,但是在子线程中,需要我们自己写这两个方法来升级为Looper线程。注意:Looper.loop()之后的方法不会再执行到1.Looper,prepare()Looper预处理操作,效果如下图所示:LooperThreadLooper线程Looper消息队列通过上图可以看到,现在你的线程中有一个Looper对象,它的内部维护了一个消息队列MQo注意,一个Thread只能有一

4、个Looper对象。Looper,prepare()方法的简单代码:publicstaticfinalvoidprepare(){if(sThreadLocal.get()!二null){//试图在有Looper的线程中再次创建Looper将抛出异常thrownewRuntimeException(〃0nlyoneLoopermaybecreatedperthread'");sThreadLocal.set(newLooper()):这个方法确保一个线程只用一个Looper对象。1.Looper.loop()保持循环接收信息的方法任

5、务执行的示意图:Looper.loopf)LooperThreadMessageLooperMessageMessage队Messagesage调用loop方法后,Looper线程就开始真正丁作了,它不断从自己的MQ中取出队头的消息(也叫任务)执行。3•除了prepare()和loop()方法,Looper类还提供了一些有用的方法,(1)Looper.myLooper()得到当前线程looper对象:publicstaticfinalLoopermyLooper()(2)getThread()得到looper对象所属线程:publi

6、cThreadgetThread()(3)quit()方法结束looper循环:publicvoidquit()4.Looper总结每个线程有且最多只能有一个Looper对象,它是一个ThreadLocalLooper内部有一个消息队列,loop()方法调用后线程开始不断从队列中取出消息执行Looper使一个线程变成Looper线程。(二)异步处理大师Handler什么是Handler?Handler扮演了往MQ上添加消息和处理消息的角色(只处理由自己发出的消息),即通知MQ它要执行一个任务(sendMessage),并在loop到

7、自己的时候执行该任务(handleMessage),整个过程是异步的。handler创建时会关联一个looper,默认的构造方法将关联当前线程的looper,不过这也是可以set的。下面是Handler消息处理的示意图:LooperThreadLooperHandler1Handler2消息队列rHandler1LLooperr—Handler21hLooper1J可以看到,一个线程可以有多个Handler,但是只能有一个Looper!有了Handler对象之后,我们就可以使用下面一些方法来发送消息1.post(Runnable)2

8、.postAtTime(Runnable,long)3.postDelayed(Runnable,long)4.sendEmptyMessage(int)5.sendMessage(Message)6.sendMessageAtTim

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。