android framework 触摸屏事件传递

    对于像我这样刚入门的android程序员,如果想大致弄清楚触摸屏事件传到用户界面的过程,我觉得需要弄清楚以下几个部分:

一 Activity, Window,View之间的关系

二  Window,WindowManager,WindowManagerServer的创建和消息传递的基本规则

三 本地类 InputReader , InputDispatcher 的创建,对触摸屏事件的读取和派发

四 触摸屏事件从InputDispatcher怎么传递到Window

五 触摸屏事件在ViewGroup/view中的传递

为了看懂相关代码,还有两个android比较重要的框架的实现:JNI 和 Binder。 这两种功能,我个人觉得,不必要很精通,能知道从哪里找到调用的方法即可。


首先,把各种涉及到的重要的接口名/类名列出来,混个脸熟。

Activity

Window

PhoneWindow

DecorView

ViewRoot ( android4.0 中为 ViewRootImpl )

WindowManager

WindowManagerImpl

LocalWindowManager

WindowManagerServer

InputManager

InputReader

InputDispatcher

接下来,一起看看各个部分。


一 Activity, Window,View之间的关系

Activity , 只要写过Android程序的人都知道,android的四大金刚之一。Activity是应用程序的载体。它并不参与界面的显示,界面的显示都交给Window来管理。

PhoneWindow是从Window派生来的,Window是一个抽象类。每个Activity中有且只有一个PhoneWindow。(至于PhoneWindow的作用,这里我暂时还无法很准确地归纳,希望有牛人赐教)

DecorView,DecorView是一个扩展的FrameLayout的类,是窗口中所有View的根View

ViewRoot, 每个Window都会对应一个ViewRoot对象。ViewRoot从Handle派生过来,处理各种其它模块发送的事件。比如触摸屏事件就是从其它模块发送到ViewRoot后,由ViewRoot的handleMessage()方法处理的。

(未完待续,本人初学,如果有问题,敬请指出,一起讨论)


你可能感兴趣的:(android,源代码阅读)