`
lijie_sh
  • 浏览: 8573 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

android系统(3) android 输入事件处理流程 (上)

 
阅读更多
由上一篇我们知道 在SystemServer中的init2 会启动 WindowManagerService,  简单介绍一下framework层输入处理流程

首先流程图如下所示:

1. 在WindowManagerService的构造函数中有下边两句
mQueue = new KeyQ();
private class KeyQ extends KeyInputQueue


2. 在KeyInputQueue的构造函数中刚启动了一个线程 mThread 主要代码如下,将输入按照不同类型存入KeyQueue中
public void run() {   
RawInputEvent ev = new RawInputEvent();    
while(true) {        
try {                     
…
readEvent(ev);
…
}
}
}


3. WindowManageService中还启动了InputDispatchThread, 这个线程的主要功能如下代码段所示
    final InputDispatcherThread mInputThread;    final InputDispatcherThread mInputThread;
private void process() {
while (true) {            
QueuedEvent ev = mQueue.getEvent(…);
    
switch (ev.classType) {
    case RawInputEvent.CLASS_KEYBOARD:        
        break;
    case RawInputEvent.CLASS_TOUCHSCREEN:
        //Log.i(TAG, "Read next event " + ev);
        dispatchPointer(ev, (MotionEvent)ev.event, 0, 0);
        break;
    case RawInputEvent.CLASS_MOUSE:       
        dispatchPointer(ev, (MotionEvent)ev.event, 0, 0);
        break;
    case RawInputEvent.CLASS_TRACKBALL:
        dispatchTrackball(ev, (MotionEvent)ev.event, 0, 0);
        break;
      default:
        mQueue.recycleEvent(ev);
    break;
}



可见 InputDispatchThread 通过 第2 步中的 InputQueue中的输入时间通过类型进行分发处理,我们拿touch事件进行分析

dispatchPointer(ev, (MotionEvent)ev.event, 0, 0) {

......
target.mClient.dispatchPointer(ev, eventTime, true);
......
}


其中mClient为IWindow接口,经过分析ViewRoot中的W类实现了这个接口。
public void dispatchPointer(MotionEvent event, long eventTime,
        boolean callWhenDone) {
    Message msg = obtainMessage(DISPATCH_POINTER);    
...    
sendMessageAtTime(msg, eventTime);
}

public void handleMessage(Message msg) {
    ...
    case DISPATCH_POINTER:    
    ...    
    mView.dispatchTouchEvent(event);    
    ...
}

ViewRoot 中如何通过 ViewGroup分发消息 研究一下下次在说。

以上都是本人研究android源码的一点点心得 与大家分享,难免有疏忽和错误,希望大家不吝赐教,谢谢!
  • 大小: 21.1 KB
1
0
分享到:
评论

相关推荐

    Android 输入事件流程

    Android 输入事件流程 Android 输入事件流程

    Android之Input子系统事件分发流程 - CSDN博客1

    Android之Input子系统事件分发流程 - CSDN博客原创2013年11月29日 08:49:08Android之Input子系统事件分发流程Andro

    android系统原理及开发要点详解

     第1章“Android系统概述”,概述Android系统方面的内容,包括智能手机平台的发展历程、Android系统的特点、Android的3种开发工作,以及Android的2种不同的开发方式。  第2章“Android系统开发综述”,介绍Android...

    Android编程输入事件流程详解

    主要介绍了Android编程输入事件流程,较为详细的分析了Android输入事件原理、相关概念与具体操作流程,需要的朋友可以参考下

    android系统原理及开发要点详解_韩超_梁泉 4

    第1章“Android系统概述”,概述Android系统方面的内容,包括智能手机平台的发展历程、Android系统的特点、Android的3种开发工作,以及Android的2种不同的开发方式。  第2章“Android系统开发综述”,介绍Android...

    Android技术内幕.系统卷(扫描版)

    《android技术内幕:系统卷》 前言 第1章 准备工作 /1 1.1 深入认识android /2 1.1.1 android的系统构架 /2 1.1.2 android的初始化流程 /5 1.1.3 各个层次之间的相互关系 /8 1.1.4 android系统开发(移植)和应用...

    Android input系统.pdf

    Android的input系统获取用户输入, 分发给特定的接收者(Framework或应用程序)进行处理, 这个流程涉及到以下一些模块:  InputReader.cpp : 负责从硬件获取输入, 转换成事件(Event), 并分发给Input Dispatcher. ...

    Android App Switch切换流程.pdf

    Android Framework,App Switch切换详细分析,按键响应,Android事件输入系统,StatusBar服务,preloadRecentApps()

    android系统原理及开发要点详解_韩超_梁泉 1

    第1章“Android系统概述”,概述Android系统方面的内容,包括智能手机平台的发展历程、Android系统的特点、Android的3种开发工作,以及Android的2种不同的开发方式。  第2章“Android系统开发综述”,介绍Android...

    Android底层开发技术实战详解 第1共2部分

    全书分为21章,依次讲解驱动移植的必要性, Goldfish、OMAP内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,OpenMax多媒体和多媒体插件框架,传感器,照相机,Wi-Fi,蓝牙和GPS,...

    android-framework-hal

    Android电话系统的本地和JAVA程序运行流程 10.3 电话系统移植层 为特定Modem移植的方法 11 Android的连接部分 11.1 WIFI无线局域网的部分 11.2 蓝牙部分 11.3 GPS部分 12 Android的传感器系统 12.1 ...

    Android技术内幕.系统卷 pdf

    《android技术内幕:系统卷》 前言 第1章 准备工作 /1 1.1 深入认识android /2 1.1.1 android的系统构架 /2 1.1.2 android的初始化流程 /5 1.1.3 各个层次之间的相互关系 /8 1.1.4 android系统开发(移植)和...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part3

    9.1.1 Android输入系统结构元素介绍239 9.1.2 移植Android输入系统时的工作240 9.2 input(输入)驱动241 9.3 模拟器的输入驱动256 9.4 msm高通处理器中的输入驱动实现257 9.4.1 触摸屏驱动257 9.4.2 按键...

    Android高级编程--源代码

    因此,对Android感兴趣的开发人员都把Google在2008年发布Android这一举措作为移动技术发展史上的一个非常令人期待的重大事件。  由于Android构建在开源代码的框架之上,而且提供了强大的SDK库和开放的理念,所以它...

    Android底层开发技术实战详解-内核、移植和驱动(第2版,Kindle电子书)

    全书分为19章,依次讲解驱动移植的必要性,何为hal层深入分析,goldfish、msm、map内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,openmax多媒体、多媒体插件框架,传感器、照相机...

    Android底层开发技术实战详解

    全书分为21章,依次讲解驱动移植的必要性, Goldfish、OMAP内核和驱动解析,显示系统、输入系统、振动器系统、音频系统、视频输出系统的驱动,OpenMax多媒体和多媒体插件框架,传感器,照相机,Wi-Fi,蓝牙和GPS,...

    Android开发实验---通讯录.docx

    实验项目名称 通讯录 实验目的与要求: 目的:练习掌握 Android 软件开发基本编程技术、Android 系统 SQLite 数据库的使用、通话、短信的使用等,设计制作一 Android 通讯录软件。 要求: (1)每位同学独立设计...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part1

    9.1.1 Android输入系统结构元素介绍239 9.1.2 移植Android输入系统时的工作240 9.2 input(输入)驱动241 9.3 模拟器的输入驱动256 9.4 msm高通处理器中的输入驱动实现257 9.4.1 触摸屏驱动257 9.4.2 按键...

Global site tag (gtag.js) - Google Analytics