- 浏览: 33475 次
- 性别:
- 来自: 北京
最新评论
原文地址:http://blog.csdn.net/maxleng/article/details/5552976
Android GWES之 Android 消息系统
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详解
Looper 只是产生一个消息循环框架,首先 Looper 创建了消息队列并把它挂接在 Linux 的线程上下文中,进入到取消息,并分发消息的循环当中。 Handler 对象在同一个线程上下文中取得消息队列,对消息队列进行封装操作,最主要的就是 SendMessage 和担当起 dispatchMessage 这个实际工作。外部系统需要向某个 Android 线程发送消息,必须通过属于该 AndroidThread 的 Handler 这个对象进行。
Handler 属于某个线程,取决 Handlerd 对象在哪个线程中建立。 Handler 在构建时做了如下的默认动作:
- l 从线程上下文取得 Looper 。
- 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
....
发表评论
-
Android核心分析(21)----Android应用框架之AndroidApplication
2012-02-13 14:34 781原文地址:http://blog.csdn ... -
Android核心分析(20)----Android应用程序框架之无边界设计意图
2012-02-13 14:31 900原文地址:http://blog.csdn ... -
Android核心分析(19)----电话系统之GSMCallTacker
2012-02-13 14:25 807原文地址:http://blog.csdn ... -
Android核心分析(18)-----Android电话系统之RIL-Java
2012-02-13 14:10 1146原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(17) ------电话系统之rilD
2012-02-13 14:02 684原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(16)-----Android电话系统-概述篇
2012-01-31 14:39 910原文地址:http://blog.csdn.net/m ... -
Android核心分析(15)--------Android输入系统之输入路径详解
2012-01-31 14:22 840原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(14)------ Android GWES之输入系统
2012-01-31 10:47 955原文地址:http://blog.csdn ... -
Android 核心分析(13) -----Android GWES之Android窗口管理
2012-01-31 10:44 823原文地址:http://blog.csdn ... -
Android 核心分析(12) -----Android GEWS窗口管理之基本架构原理
2012-01-31 10:27 1036原文地址:http://blog.csdn.net/maxle ... -
Android SurfaceFlinger中的SharedClient -- 客户端(Surface)和服务端(Layer)之间的显示缓冲区管理
2012-01-11 11:00 1356原文地址:http://blog.csdn.net/Droid ... -
Android核心分析 之十-------Android GWES之基本原理篇
2011-12-30 15:08 738原文地址:http://blog.csdn ... -
Android核心分析 之九-------Zygote Service
2011-12-30 15:02 760原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之八------Android 启动过程详解
2011-12-30 14:56 637原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之七------Service深入分析
2011-12-30 14:48 1134原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之六 -----IPC框架分析 Binder,Service,Service manager
2011-12-30 14:41 940原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之五 -----基本空间划分
2011-12-29 11:13 658原文地址:http://blog.csdn.net/maxle ... -
Android核心分析之四 ---手机的软件形态
2011-12-29 11:09 658原文地址:http://blog.csdn.net/maxle ... -
Android是什么 之三-------手机之硬件形态
2011-12-29 11:07 643原文地址:http://blog.csdn.net/maxle ... -
Android核心分析 之二 -------方法论探讨之概念空间篇
2011-12-29 11:03 595原文地址:http://blog.csdn.net/maxle ...
相关推荐
在Android系统中,消息系统是实现线程间通信和异步任务执行的关键组件。它主要由Looper、MessageQueue和Handler三个核心元素组成。本篇分析将深入探讨这些概念以及它们如何协同工作,以构建Android的消息分发框架。 ...
Android 核心分析 之十一-------Android GWES 之消息系统.......................................43 Android 核心分析(12) -----Android GEWS 窗口管理之基本架构原理...................... 48 Android 核心分析...
核心分析之十一 ----- Android GWES之消息系统 核心分析之十二 ----- Android GWES窗口管理之基本架构原理 核心分析之十三 ----- Android GWES之Android窗口管理 核心分析之十四 ----- Android GWES之输入系统 核心...
Android核心分析之十一-------AndroidGWES之消息系统.......................................43 Android核心分析(12)-----AndroidGEWS窗口管理之基本架构原理......................48 Android核心分析(13)-----...
这篇文档主要探讨了Android GWES(Global Workspace Environment System)中的窗口管理机制,特别是涉及到Window、DecorView、View、IWindow、ISession以及WindowState等核心组件之间的关系。 1. **基本构架原理** ...
[转]Android核心分析 技术专题之十一--Android GWES之消息系统
**Android核心分析(24):** 显示缓冲管理是GDI中的关键环节之一,这部分内容详细解释了缓冲区的分配、回收以及同步机制。 **Android核心分析(25):** 共享缓冲区机制允许不同的应用程序或组件之间高效地共享图像...
4.窗口管理:Android窗口管理的基本架构原理、GWES之基本原理篇、GWES之消息系统。 5.输入系统:Android输入系统之输入路径详解。 6.电话系统:Android电话系统概述篇、rilD、RIL-Java、GSMCallTacker。 7.应用...
[转]Android核心分析 技术专题之十--Android GWES之基本原理
### Android核心分析——设计意图与方法论探讨 #### 一、设计意图的探索 在深入研究Android之前,首要任务是理解其背后的设计理念。对于一个跨平台开发者而言,熟悉并掌握Android的核心概念至关重要。Android引入...
Android 核心分析 技术专题之十三--Android GWES之Android窗口管理
[转]Android核心分析 技术专题之十四--Android GWES之输入系统.
#### 十一、AndroidGWES之消息系统 本节继续探讨GWES的消息传递机制,包括消息队列的管理、消息的分发等。这些内容对于理解UI线程和主线程之间如何协同工作非常有用。 #### 十二、AndroidGEWS窗口管理之基本架构...
通过对Android核心分析文档的学习,我们不仅能够了解其底层技术实现,还能深刻体会到设计者在构建这一复杂系统时所遵循的原则和理念。从宏观到微观的分析方法帮助我们建立起对Android系统全面且深入的理解。这不仅是...
11. Android GWES的消息系统:讲解了Android的事件驱动模型,尤其是Message和Handler如何处理UI线程与其他线程的通信。 12. 窗口管理基本架构原理:分析了Android如何管理应用程序的窗口,包括窗口栈、视图层次和...
#### AndroidGWES之消息系统 消息系统是GWES的重要组成部分,用于协调各个窗口之间的交互,包括触摸事件的分发等。 #### AndroidGWES窗口管理之基本架构原理 Android的窗口管理器(Window Manager)负责管理和...
综上所述,《Android核心分析》不仅涵盖了Android系统的各个层面,还深入探讨了每个组成部分的设计思想和技术细节。这对于希望深入了解Android系统内部机制的开发者来说,是一份非常宝贵的参考资料。
6. Android GWES(Graphical, Windowing, Event, and Services subsystem):包括基本原理、消息系统、窗口管理、输入系统等方面的详细分析。 7. Android GDI(Graphics Device Interface):显示缓冲管理、共享缓冲...