银行流水能打英文吗:Android核心分析 之十一-------Android GWES之消息系统
来源:百度文库 编辑:偶看新闻 时间:2024/04/27 21:13:45
Android GWES之Android消息系统
Looper,Handler,View 我们要理解Android的消息系统,Looper,Handle,View等概念还是需要从消息系统的基本原理及其构造这个源头开始。从这个源头,我们才能很清楚的看到Android设计者设计消息系统之意图及其设计的技术路线。 消息系统的基本原理
从一般的系统设计来讲,一个消息循环系统的建立需要有以下几个要素: 消息队列
发送消息
消息读取
消息分发
消息循环线程
首先来研究一下消息驱动的基本模型,我使用如下的图形来表示一个消息系统最基本构成:
Android要建立一个消息系统使用了Looper,MessageQueue,Handler等概念,从上节的原理我们可以知道这些都是概念包装,本质的东西就是消息队列中消息的分发路径的和消息分发处理方式的设计。Android巧妙的利用了对象抽象技术抽象出了Looper和Handler的概念。在Looper和Handler两个概念的基础上,通过View的处理函数框架,Android十分完美的达到消息分发的目的。 参照基本消息系统描述模型,我给出了Android消息系统整体框架,表示如下:
l 通过Looper获取到消息队列并记录在自己的成员mQueue变量中
Handler使用消息队列进行对象封装,提供如下的成员函数:l 通过 post(Runnable r)发送。Runnable是消息处理的回调函数,通过该消息的发送,引起Runable 的回调运行,Post消息放置消息队列的前面。Message.callback=Runable.
l 通过 sendMessage发送。放置在所有的Post消息之后,sendMessage发送消息.
l dispatchMessage分发消息。消息带有回调函数,则执行消息回调函数,如何没有则使用默认处理函数:handleMessage。而handleMessage往往被重载成某个继承Handler对象的新的特定的handleMessage。
几乎所有的Message发送时,都指定了target。Message.target=(this). Looper运行在Activity何处?我们现在可以从代码堆栈中纵观一下Looper的位置。 NaiveStart.main() ZygoteInit.main ZygoteInit$MethodAndArgsCall.run Method.Invoke method.invokeNative ActivityThread.main() Looper.loop() ViewRoot$RootHandler().dispatch() handleMessage .... 这样我们就更清楚的了解到Looper的运行位置。
Looper,Handler,View 我们要理解Android的消息系统,Looper,Handle,View等概念还是需要从消息系统的基本原理及其构造这个源头开始。从这个源头,我们才能很清楚的看到Android设计者设计消息系统之意图及其设计的技术路线。 消息系统的基本原理
从一般的系统设计来讲,一个消息循环系统的建立需要有以下几个要素: 消息队列
发送消息
消息读取
消息分发
消息循环线程
首先来研究一下消息驱动的基本模型,我使用如下的图形来表示一个消息系统最基本构成:
上面的模型代表应用程序一直查询自己的消息队列,如果有有消息进来,应用消息处理函数中根据消息类型及其参数来作相应的处理。
消息系统要运作起来,必定有消息的产生和消费。我们可以从下图看到消息生产和消费的一个基本的链条,这是一个最基本的,最简单的消息系统。生产线程将消息发送到消息队列,消息消费者线程从消息队列取出消息进行相应的处理。但是这样简单的模型对实际运行的系统来说是不够的,例如对系统资源的消耗等不能很好的处理,我们就需要一个有旗语的消息系统模型,在上面的消息系统模型中加入了一个旗语,让消息消费者线程在没有消息队列为空时,等待旗语,进入到挂起状态,而有消息到达时,才被唤醒继续运行。当然生产者同时也可以是消费者。
2 Android的消息模型Android要建立一个消息系统使用了Looper,MessageQueue,Handler等概念,从上节的原理我们可以知道这些都是概念包装,本质的东西就是消息队列中消息的分发路径的和消息分发处理方式的设计。Android巧妙的利用了对象抽象技术抽象出了Looper和Handler的概念。在Looper和Handler两个概念的基础上,通过View的处理函数框架,Android十分完美的达到消息分发的目的。 参照基本消息系统描述模型,我给出了Android消息系统整体框架,表示如下:
Android消息系统消息分发框架
3 Looper,Handler详解
l 通过Looper获取到消息队列并记录在自己的成员mQueue变量中
Handler使用消息队列进行对象封装,提供如下的成员函数:l 通过 post(Runnable r)发送。Runnable是消息处理的回调函数,通过该消息的发送,引起Runable 的回调运行,Post消息放置消息队列的前面。Message.callback=Runable.
l 通过 sendMessage发送。放置在所有的Post消息之后,sendMessage发送消息.
l dispatchMessage分发消息。消息带有回调函数,则执行消息回调函数,如何没有则使用默认处理函数:handleMessage。而handleMessage往往被重载成某个继承Handler对象的新的特定的handleMessage。
几乎所有的Message发送时,都指定了target。Message.target=(this). Looper运行在Activity何处?我们现在可以从代码堆栈中纵观一下Looper的位置。 NaiveStart.main() ZygoteInit.main ZygoteInit$MethodAndArgsCall.run Method.Invoke method.invokeNative ActivityThread.main() Looper.loop() ViewRoot$RootHandler().dispatch() handleMessage .... 这样我们就更清楚的了解到Looper的运行位置。
paranoid android中文歌词
十一五中强调大力弘扬民族精神的核心是
恶作剧之吻十一集哪有?
分析印度当前的核心竞争力
radiohead 的 Paranoid Android 中文翻译
酒店经营之核心竞争力探究
谁抢到就是谁的?之十一
浪客系列问题之十一
求邓小平理论选择题答案-之十一
QQ故障之分析
“十一”
岳飞死因之分析?
音乐的核心要素有哪些?请具体说明之
四项基本原则是立国之本,其核心是什么
谁抢到就是谁的?之二十一
来点幽默,齐齐开心之:十一平方:打一字
鲍照的《拟行路难》之十一的译文
鲍照的《拟行路难》之十一翻译
鲍照的《拟行路难》之十一翻译
轩辕剑之天之痕中如何到达赤星的核心???
分析`情人与配偶之女性的
市场营销案例分析全球之星
如何分析广告创意的优秀之处
嘉莉妹妹之角色分析