handler的各种用法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
handler的各种用法

Looper20.1Looper handler MessageQueue关系图20.2 Looper的api介绍30.3 源码解析40.3.1 looper源码解析40.3.2 ActivityThread中消息循环机制原理 源码解析50.4子线程向主线程(UI线程)发送消息(android只能在主线程中更新UI)80.4.1 方法1—》通过handler的sendMessage方法80.4.2 方法二—》通过Activity里的runOnUiThread()90.4 主线程向子线程发送消息101.handler的介绍112.Message的介绍132.1 Message的api讲解132.2 Message里面的方法setData(Bundle bundle)143.handler处理消息方式1—通过sendXXX方法153.1 Message.obtain()153.2 Message.obtain(handler)163.3 Message.obtain(handler,what)173.4 Message.obtain(h, what, arg1, arg2)183.5 Message.obtain(handler, what, arg1, arg2, obj)193.6 handler.obtainMessage()193.7 handler.setEmptyMessage(what)203.8 hanlder.sendEmptyMessageAtTime(int what,long uptimeMillis)223.9 handler.sendEmptyMessageDelayed(what, delayMillis)233.10 handler.sendManage和handler.sendEmptyManage的区别234.handler处理消息方式2---通过postXXX方法处理消息245.handler处理消息的相应的例子295.1从网上下载图片,显示在ImagView上295.11 第一种方法(访问网络的操作没有封装)295.12 第二种方法(封装访问网络的操作)305.2 更新TextView内容(通过TextView的追加来更新内容)325.3 handler ----》更新进度条33Looper0.1Looper handler MessageQueue关系图UI主线程初始化第一个Handler时会通过ThreadLocal创建一个Looper,该Looper与UI主线程一一对应。使用ThreadLocal的目的是保证每一个线程只创建唯一一个Looper。之后其他Handler初始化的时候直接获取第一个Handler创建的Looper。Looper初始化的时候会创建一个消息队列MessageQueue。Looper对象的执行需要初始化创建MessageQueue用Looper.prepare方法,使用Looper.loop方法启动消息队列管理机制,退出时还要使用Looper.release方法释放资源Activity源码里的Looper:主线程的Looper0.2 Looper的api介绍Looper类用来为线程运行消息循环,线程默认情况下没有与之相关联的消息循环。为了创建消息循环,在运行loop的线程里调用prepare方法,然后调用loop方法来处理消息直到循环结束。0.3 源码解析0.3.1 looper源码解析0.3.2 ActivityThread中消息循环机制原理 源码解析首先程序在启动的时候,会执行ActivityThread类的main方法第一步:生成与本地相关的Looper对象可以看到这里和普通线程循环读取消息序列不同:1、普通线程使用prepare()就行了,主线程使用的是premMainlooper();2、普通线程会在中间创建一个帮忙的looper的handler对象,而主线程会从当前线程获取到主线程的handler(gethandler)第二步:Thread与handler的绑定首先获得handler然后调用Looper.loop()这里会先获取到looper对象的消息队列messagequeue,然后进入死循环for(;;),不断的.next获取到最前的msg,然后进入关键一步msg.target.dispatchMessage(msg);这里的target就是执行消息队列任务的handler,而dispatchMessage进入源码看下是什么到此ActivityThread中消息循环机制完成,总结下:1、prepareMainLooper 进行消息队列的创建,生成looper对象,且让sMainLooper指向它2、通过gethandler获取当前线程handl

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档