学习android内核 --View工作原理相关
来源:互联网 发布:搜图片出处软件 编辑:程序博客网 时间:2024/04/29 02:38
View系统定义了从用户输入消息到消息处理的全过程。
消息处理过程:(按键消息KeyEvent、点消息Pointer、轨迹球消息Trackball)
1.用户触摸屏幕的消息或键盘消息等输入设置产生消息-〉转换成系统统一处理的消息值 -> 再分发到各窗口系统(由WmS判断用户正在与哪个窗口交互)。
2.因为窗口都是由WmS创建的,所以其知所有窗口的信息,比如大小,位置等。
3.如果是按键消息:则直接发送给当前窗口。
4.如果是触摸消息:WmS则会根据消息的位置坐标去匹配所有的窗口,坐标落在哪个窗口区域中,就把消息发送给该对应窗口。
5.消息到达处理窗口,如何处理则是该窗口内部自己的事。系统一般提供了一些方法或一些特定的回调函数重载,达到自定义消息处理的目的。(这里体现了一个概念就是感觉是操作系统在调用我们,而不是我们在调用操作系统,这样的架构有利于应用开发)。
View系统获取消息后:
会按照默认的逻辑来派发消息,主要就是把该消息派发给所有的子视图(View),以便相应的子视图能够获得消息并执行不同的任务。
1.后台任务(界面没有刷新变化):那么该View系统接下来仅按照默认逻辑继续派发下一个用户消息;
2.界面有刷新变化的:则需要重绘;
重绘:
重绘需要三大步骤:
1.计算该窗口的所有视图的大小,即measure过程。(一个视图中界面变化是否重新计算大小,要根据在View中的一个变量判断决定(一般改变了界面后会设置该变量))
2.为所有视图分配位置,即layout过程。
3.将视图绘制到屏幕上。(在绘制的时候,系统内部为每一个窗口创建了一个Canvas对象,并把这个Canvas对象传递给从根视图到所有子视图。View系统将Canvas传递给子视图时,都先将画布进行一次裁剪,从而在子视图看来,总是从画布的(0,0)位置开始绘制的)。
--------------------------------------------
按键消息总体派发过程:
1.如果窗口存在输入法,则先把按键消息派发给输入法窗口处理,不过在此之前如果程序员可以重载diapatchKeyEventPreIme()函数来截获一些特别的按键消息。
2.输入法如果没有消耗该消息,则消息进入View树进行处理。
3.处理完所有消息后,如果WmS要求发送执行完毕回执,则调用finishInputEvent()报告给WmS已经处理的消息,从而使得WmS可以继续派发下一个消息。
根视图内部派发流程:
系统调用mView.dispatchKeyEvent()将消息派发到根视图,这个根视图要么是
1.PhoneWindow.DecorView: 如 Activity窗口
2.普通的ViewGroup: 如 状态栏窗口
- 学习android内核 --View工作原理相关
- android中View的工作原理(android内核学习记录)
- 《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】
- 《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】
- 《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】
- Android view的工作原理
- Android开发: View - 工作原理
- Android View的工作原理
- android View的工作原理
- android之View工作原理
- Android-View 的工作原理
- Android View 的工作原理
- android View的工作原理
- Android View 的工作原理
- 《Android内核剖析》读书笔记 第13章 View工作原理【消息类型与按键消息派发】
- 《Android内核剖析》读书笔记 第13章 View工作原理【触摸消息派发】
- 《Android内核剖析》读书笔记 第13章 View工作原理【动画概述】
- View的工作原理(—)View相关基本概念
- Android Developers:和其它Fragment通信
- 平台总线设备模型
- 构建工作图谱 社交软件的第三种革命
- SQL执行顺序说明
- Android 系统框架介绍
- 学习android内核 --View工作原理相关
- Javascript & cookie
- OCP-1Z0-052-V8.02-177题
- Path图片缓存实现方法
- Linux I2C子系统分析-I2C总线驱动&&Linux I2C子系统分析-I2C设备驱动
- 安装Zend Studio 9.0.4
- 为何HTML5是Android开发的一个很好的选择
- Android开发中使用eclipse中的DDMS对应用的内存检测
- B. Flag Day