android事件驱动

android事件驱动

ID:37919320

大小:70.50 KB

页数:10页

时间:2019-06-02

android事件驱动_第1页
android事件驱动_第2页
android事件驱动_第3页
android事件驱动_第4页
android事件驱动_第5页
资源描述:

《android事件驱动》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Init-----------zygote---------system-server-------------------windosmanager ------------------------------------------------------------UEventObserver ------------------------------------------------------------InputDeviceRead ------------------------------------

2、-------------------------InputDispatcher -------------------------------------------------------------DisplayEventThr -------------------------------------------------------------ActivityManager EventHub: 而事件的传入是从EventHub开始的,EventHub是事件的抽象结构,维护着系统设备的运行情况,设备类型包括Ke

3、yboard、TouchScreen、TraceBall。它在系统启动的时候会通过open_device方法将系统提供的输入设备都增加到这个抽象结构中,并维护一个所有输入设备的文件描述符,如果输入设备是键盘的话还会读取/system/usr/keylayout/目录下对应键盘设备的映射文件,另外getEvent方法是对EventHub中的设备文件描述符使用poll操作等侍驱动层事件的发生,如果发生的事件是键盘事件,则调用Map函数按照映射文件转换成相应的键值并将扫描码和键码返回给KeyInputQueue。 KeyLay

4、outMap主要是读取键盘映射文件并将键盘扫描码和键码进行转换 frameworksbasecorejniservercom_android_server_KeyInputQueue.cpp EventHub和KeyinputQueue的JNI接口层 KeyinputQueue: 在线程InputDeviceReader中会根据事件的类型以及事件值进行判断处理,从而确定这个事件对应的设备状态是否发生了改变并相应的改变对这个设备的描述结构InputDevice。 getEvent:在给定时间段时看是否有事件发生,

5、如果有的话返回true否则false。 Windowmanager: (frameworks/base/services/java/com/android/server/windowmanagerservice.java) 进程Windowmanager会创建一个线程(InputDispatcherThread),在这个线程里从事件队列中读取发生的事件(QueuedEventev=mQueue.getEvent()),并根据读取到事件类型的不同分成三类(KEYBOARD、TOUCHSCREEN、TRACKBALL),分别

6、进行处理,例如键盘事件会调用dispatchKey((KeyEvent)ev.event,0,0)以将事件通过Binder发送给具有焦点的窗口应用程序,然后调用mQueue.recycleEvent(ev)继续等侍键盘事件的发生;如果是触摸屏事件则调用dispatchPointer(ev,(MotionEvent)ev.event,0,0),这里会根据事件的种类(UP、DOWN、MOVE、OUT_SIDE等)进行判断并处理,比如Cancel或将事件发送到具有权限的指定的窗口中去; Android输入事件流程 EventH

7、ub EventHub对输入设备进行了封装。输入设备驱动程序对用户空间应用程序提供一些设备文件,这些设备文件放在/dev/input里面。 EventHub扫描/dev/input下所有设备文件,并打开它们。 C代码 1.bool EventHub::openPlatformInput(void)  2.{  3....  4.    mFDCount = 1;  5.    mFDs = (pollfd *)calloc(1, sizeof(mFDs[0]));  6.    mDevices = (device_t 

8、**)calloc(1, sizeof(mDevices[0]));  7.    mFDs[0].events = POLLIN;  8.    mDevices[0] = NULL;  9.  10.    res = scan_dir(device_path);  11....  12.    return t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。