- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android消息处理机制
目录
Android消息处理 1
Handler的简介 1
Handler的作用: 2
Android开发过程中为什么要多线程 2
Handler与线程的关系: 2
Handler的编程机制: 3
Handler实例 3
Looper 6
Message 9
MessageQueue 10
AsyncTask 11
附录: 15
附上一篇《Android Looper和Handler分析》 15
Android消息处理
——Handler/Thread/Looper MessageQueue
?Handler
Handler在文档中的定义是:Handler主要用来接收子线程发送的数据,并用此数据配合主线程更新UI。
Handler可以分发Message对象和Runnable对象到主线程中,每个Handler实例,一旦创建后,系统就会把该实例与一个线程和该线程的消息队列绑定带一起,这将可以发送消息和runnable对象给该消息队列,并在消息队列出口处理它们。
当一个进程启动时,主线程独立执行一个消息队列,该队列管理着应用顶层的对象(如:activities、broadcast receivers等等)和所有创建的窗口。由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sendMessage()方法传递)Message对象(里面包含数据), 把这些消息放入主线程队列中,配合主线程进行更新UI。
Handler的作用:
它有两个作用:
(1)安排消息或Runnable 在某个主线程中某个地方执行
(2)安排一个动作在不同的线程中执行
Handler中分发消息的一些方法:
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnable long)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中, sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.
Android开发过程中为什么要多线程
在Android系统中,当一个应用程序启动时,首先会启动一个主线程(也被称为UI线程),该线程负责管理界面中的UI控件,进行事件分发,并响应用户的操作。在主线程中不能执行比较耗时的操作(一般不能超过5s),否则Android会认为该应用无响应,便会弹出程序没有响应对话框。如果要执行一些像下载、解析大文件等比较耗时的操作的话,则可以放在Service组件中或放在子线程中执行。但Android它不允许在子线程中更新UI组件,UI的更新只能在主线程中执行。
Handler与线程的关系:
在Android,线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper。我们的主线程(UI线程)就是一个消息循环的线程。消息的发送和清除,消息的处理,这些都封装在Handle里面,注意Handle只是针对那些有Looper的线程,不管是UI线程还是子线程,只要你有Looper,我就可以往你的消息队列里面添加东西,并做相应的处理。
Handler的post方法将Runnable对象放到Handler的线程队列中后,该Runnable的执行其实并未单独开启线程,而是仍然在当前Activity线程中执行的,Handler只是调用Runnable对象的run方法。
Handler的编程机制:
我们通常在UI线程中创建一个handler,handler相当于一个处理器,它主要负责处理和绑定到该handler的线程中的message。每一个handler都必须关联一个looper,并且两者是一一对应的,这点很重要!此外,looper负责从其内部的messageQueue中拿出一个个的message给handler进行处理。因为我们这里handler是在UI线程中实现的,所以经过这么一个handler、message机制,我们就可以回到UI线程中了。
何为handler:处理后台进程返回数据的工作人员。
何为message:后台进程返回的数据,里面可以存储bundle等数据格式
何为messageQueue:是线程对应looper的一部分,负责存储从后台进程中抛回的和当前handler绑定的message,是一个队列。
何为looper:looper相当于一个messageQueue的管理人员,它会
文档评论(0)