
---【消息处理分析】
文章平均质量分 91
Achillisjack
这个作者很懒,什么都没留下…
展开
-
Activity取消注册InputChannel(十二)
1,概念在启动一个acitivity时,将该activity和服务进程的InputChannel对应,这样事件就可以通过sockets进行通信了。但是只有当前显示的acitivity才会获取事件,这就说明,在有一刻,会断开其他acitivity和服务进程的对应关系。比如,销毁activity时就会断开该对应关系。2,取消注册分析销毁activity时会调用activ原创 2017-01-18 23:18:58 · 8279 阅读 · 0 评论 -
PhoneWindowManager处理事件分析(十一)
1, 基本概念PhoneWindowManager也是运行于systemserver线程中,在Event事件分发之前处理,比如电源键。Event事件分发后,仅有包含Activity的apk线程才可以处理,如果apk中没有activity但是想处理Event事件怎么办呢?可以在PhoneWindowManager做做文章了。在SystemServer中,inputManager = ne原创 2017-01-18 23:07:58 · 22325 阅读 · 5 评论 -
按键事件分发分析之二(九)
3 KeyEvent处理大体流程图如下,dispatch方法如下,public final boolean dispatch(Callback receiver, DispatcherState state, Object target) { switch (mAction) { case ACTION_DOW原创 2017-01-18 23:01:15 · 1214 阅读 · 0 评论 -
触摸事件分发源码分析(十)
1,触摸事件手机屏幕就是人机交互的入口。触摸事件接口(KeyEvent):ACTION_UP ACTION_DOWNACTION_CANCELACTION_MOVE2,触摸事件分发处理分发处理流程如下,ViewRootImpl的内部类ViewPostImeInputStage的processPointerEvent方法会调用View的dispatch原创 2017-01-18 23:00:01 · 940 阅读 · 0 评论 -
按键事件分发分析之一(八)
1,按键事件手机上有各种各样的实体按键,比如音量上下键,开机键等等。按键事件接口(KeyEvent):ACTION_DOWN // 按键按下ACTION_UP // 按键抬起ACTION_MULTIPLE // 复合键每一个按键唯一不同的是keycode,所有的键值都定义在frameworks/base/core/java/android/view/K原创 2017-01-18 22:48:38 · 3218 阅读 · 0 评论 -
应用层分发事件分析(七)
1 概念从硬件的角度看,事件主要分为以下几类:1,按键事件(KeyEvent)2,触摸事件(TounchEvent)3,鼠标事件(MouseEvent)4,轨迹球事件(TrackballEvent)2 ViewRootImpl事件处理底层通过JNI会调用ViewRootImpl内部类WindowInputEventReceiver的onInputEvent方法,原创 2017-01-18 22:38:02 · 2648 阅读 · 1 评论 -
Activity注册InputChannel和处理Event(六)
5Activity注册InputChannel和处理Event5.1 注册InputChannelInputChannel的涉及面比较广,我们知道,仅有android手机当前界面的activity能响应键盘/触摸等事件,那InputChannel肯定和界面刚准备显示的流程代码有关系,在创建界面时,会调用ViewRootImpl的setView方法,最后会调用WMS的addWindow方原创 2017-01-18 22:29:15 · 1096 阅读 · 0 评论 -
Event分发源码分析(五)
4,分发Event4.1 System分发流程长而杂,仅分析关键点,dispatchOnceInnerLocked方法首先从mInboundQueue中取出KeyEntry,然后根据不同类型的KeyEntry分别进行处理。void InputDispatcher::dispatchOnceInnerLocked(nsecs_t* nextWakeupTime) {•••mPen原创 2017-01-18 22:14:01 · 1200 阅读 · 0 评论 -
Event处理(四)
3.2.2 处理Eventvoid InputReader::processEventsForDeviceLocked(int32_t deviceId, const RawEvent* rawEvents, size_t count) { ssize_t deviceIndex = mDevices.indexOfKey(deviceId); if (de原创 2017-01-18 22:04:23 · 1168 阅读 · 0 评论 -
Event的获取和处理(三)
3,Event的获取和处理3,1 获取第一章中讲到, InputManagerService的start方法最后会调用InputReaderThread的run方法,开始启动线程,首先看运行方法,bool InputReaderThread::threadLoop() { mReader->loopOnce(); return true;}void Input原创 2017-01-18 21:56:22 · 1577 阅读 · 0 评论 -
EventHub分析(二)
2, EventHub一台移动设备中能产生输入消息的部件很多,比如键盘,触摸屏以及按键等等,EventHub主要是将这些设备产生的消息打包成一种格式,再发往上层进行处理. 首先看看EventHub的构造函数,EventHub::EventHub(void) : mBuiltInKeyboardId(NO_BUILT_IN_KEYBOARD), mNextDeviceId原创 2017-01-18 21:46:28 · 3936 阅读 · 0 评论 -
InputManagerService分析(一)
1, IMS启动IMS(InputManagerService)管理android系统中的所有输入,包括常见的触摸屏和键盘,还包括各种传感器的输入。IMS和其他的系统服务一样,都是在SystemServer中创建的,inputManager = new InputManagerService(context);static jlong nativeInit(JNIEnv* env, j原创 2017-01-18 21:41:52 · 1435 阅读 · 1 评论