2014年1月5日星期日

【Android】Android输入子系统

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
【Android】Android输入子系统  阅读原文»

【Android】Android输入子系统

成鹏致远|2013-10-25

Linux输入子系统回顾

1:为什么要回顾linux输入子系统?这个问题后面自然就知道了

1.linux输入子系统设备是基于平台设备机制的,所以先回顾平台设备机制,主要回顾后面用得到的东西

1.申请主设备号
2.创建cdev->将cdev挂载到系统设备哈希链表中,同时生成inode节点
3.创建device->将device与刚生成的inode节点关联起来,为上层调用提供接口

2.注册输入子系统设备

1.创建一个设备类class
2.申请主设备号
3.创建cdev->将cdev挂载到系统设备哈希链表中,同时生成inode节点
4.创建input_device->将input_device与刚生成的inode节点关联起来,为事件驱动层提供接口

1.注册设备支持输入事件类型(type)->【这个后面会用到】
2.注册设备支持输入事件编码
3.生成/dev/input_device

      5.当input_device与input_hander匹配成功

1.生成/dev/input*
2.上层应用通过主设备号打开/dev/input,通过次设备号打开/dev/input_device

3.输入子系统部分函数

1.read函数->读【后面会用到】
2.write函数->写【后面会用到】
3.event函数->上报事件【后面会用到】

【提前思考的问题】

1.Android事件处理系统是怎么捕捉到输入事件的?
2.Android上层应用是怎么捕捉到输入事件的?
3.Android上层应用捕捉到输入事件是怎么响应的?


2.从启动一个Android程序开始

  1.Activity启动流程:onCreate()->onStart()->onResume()->Activity Running

【Q1】:为什么onStart()后不直接Running,要插入一个onResume(),在onResume()中系统作了什么事情?
<A1>:在onResume()中,系统会为该Activity创建一个ViewRoot!

【Q2】:这个ViewRoot有什么用?它做了哪些事情?这个后面解答


3.Android事件从输入到输出的整个流程

  1.Activity运行时,用户点击触摸屏操作->{事件产生
    1.点击触摸屏,必然会调用触摸屏驱动->{事件输入

【Q3】:事件传递过程?->{事件传递}
<A3>:以下所有步骤!
 1.Android上层应用调用Framework层的JNI本地方法->{事件消息传递到JNI层

 1.实现JNI层方法,填充本地方法映射表,实现提供Android上层应用的接口
 2.生成so动态链接库文件,adb push到/system/lib目录下

 2.JNI本地方法调用HAL层(硬件抽象层:中间件)方法->{事件消息传递到HAL层

 1.JNI层通过指定ID得到HAL模块实例,然后调用HAL层函数
 2.生成so动态链接库文件,adb push到/system/lib/hw目录下

 3.HAL通过系统调用write进入内核层->{事件消息传递到内核

 1.copy_from_user()取得用户层数据
 2.调用input_device.write->{(1.1.2):事件消息传递到驱动层

------------------------------------------------------------------------------------------
 4.输入设备驱动获取事件,调用event函数->{(1.1.3)}
 5.事件处理层根据事件类型进行上报->{事件消息传递到内核事件处理层
   1.调用input_event(device,type,code,value)->{【type】后面会用到}
 6.到事件处理层时,内核会唤醒read函数->{(1.1.1):事件消息传递到内核层
   1.通过copy_to_user()将内核数据传递到用户空间->{事件消息传递到用户空间
【Q4】:read函数被谁调用的?
 7.事件消息被Android的事件处理系统捕捉到->{事件消息传递到Android事件处理系统

 1.Android事件处理系统将这个消息发送到Android应用层
【Q5】:事件消息在Android事件处理系统中是怎么传递的?

 8.Android上层获取事件消息,根据事件类型(3.1.1.5.1:type)响应上层View相应回调函数
 9.Android界面UI更新->{事件响应


4.至此为此,项目中用到的框架知识已经介绍完毕

  1.Android事件处理系统作为一个黑盒子,暂时略过
  2.切入到项目解读:电视棒远程遥控器

1.客户端APK

1.数据采集->{此数据必须与Linux输入子系统兼容,这样才能达到欺骗系统的目的}
2.数据传递

2013我在奔波中走过-----------那年的高考改变了什么?  阅读原文»

2013我在奔波中走过-----------那年的高考改变了什么?

这段时间确实是很忙,至从进了工场以后,工作压力陡增。进之前没有系统接受项目培训,直接进的项目组,软件架构自己也不怎么熟悉(只给看数据模型,也看不出啥啊)。再加上用的技术自己以前不是很熟悉(几乎就是不了解),创业团队的工作任务又比较紧凑,每天在公司遇到的问题很多,下班后就赶紧的看书充电。但是还是赶不上分配给自己的任务进度,整天被Master抱怨,说我做东西太慢等等。

自己曾经读过一篇文章《我是如何毁掉一个网游公司的》,说的是一个应届毕业生犯得一个简单的错误,让一个游戏公司损失了几百万美元。由于对开发环境的不熟悉,自己每天操作代码库都是提心吊胆的,生怕哪一步搞错了,把代码库给毁了。所以,这段时间自己的日子是很不好过的。一直想写但是没找到合适的时间来写。今天刚好周末,就抽时间把13的年终总结给写了。

好吧,尽管2013年的钟声已经敲过了,步入了2014。自己也从河南焦作到武汉,在武汉短暂的逗留后,到了北京。转眼就要毕业了,当自己回首看自己2012年的年终终结的时候(我的程序员之路----2012在匍匐中前进),发现原来时间过得如此之快,真有点应不暇接了。

2012年的年终终结自己给2013的自己定下了一些目标。值得自己高兴的是除了没有能够很好地提高自己的数据结构和算法能力外,其它的目标都完成了。那么自己的2013又做了些什么呢?

1)没有功成,但是身已该退

说实话,跟大学老师接触的越多,越发现,现在大学的体制真的变了。有些教授老师并不是拿教书育人作为己任了,他们更多地都是在为自己考虑。当然也不排除有一心一意搞教学的老师存在。有幸是大学我碰到过一位,但是我从他身上学到的知识却很少,也算是大学的遗憾吧(其实也没办法,数据结构作为最难的计算机基础课之一,听得懂都是问题,别说把那些原理用代码写出来了)。大学自主学习的必要性是我们想要获取知识的重要途径之一,当然也还有参加一些有意义的社团组织。回首大学四年让自己收获最多的也就是自己呆过一年半的行思工作室吧!刚入学有一些有经验的学长引导,对自己大学四年的计算机学习起到了决定影响。2013年的元旦过后,自己退出了伴随自己一年半的行思工作室。在里面,自己从一个什么也不懂的毛躁少年,最终成长为一位可以独当一面的程序组长。期间自己也收获了很多带领团队和处理人际关系知识,那无疑是自己大学收获的最宝贵的财富。无疑自己是幸运的。

其实在这个过程中自己并不是做的最好,能力最强的那个。相反在学习的过程中,总有人会比你学的快,做作业比你快而且好。而我剩下的唯一能和他们比拼的就是坚持和耐心了。慢慢的身边很多比自己学的好的,能力强的,做得快的同学,因为各种各样的原因慢慢放松了学习或者离开了。但自己还站在那里,自己也就成了那个不是最好的"最好"。当自己一步一个脚印走过来了,再回首去看自己身后走过的路,会发现原来自己经历的一切并不是那么的重要或者说是不可战胜。

记得自己最后一次组织了11级的小组成员会,安排了我退出后的组长人选,并说了自己对他们的期许(现在发现他们比我做的要优秀的多),心情非常的复杂。收拾完东西离开办公室走在回寝室的路上,自己一直在回忆自己在这一年半做过的事情。虽然没有做出什么值得自己自豪的成就,但是自己觉得还是蛮对的起培养过自己的人,环境和自己。毕竟我把我从工作室学到的东西,都一点不漏的留在了那里。自己也从工作室收获了成长。也没有什么值得遗憾的。

这是自己在12级招新招新时候的照片,那个时候,一些工作已经开始跟11级交接了。

05113849-dc08a6762cb6413b8bc1c26fbea9f94

2)让人记忆犹新的寒假工日子

身边人给我的评价是,我是一个敢于闯的人,我也觉的这很符合我的性格。那我的13年的寒假做了些什么呢?我去了苏州昆山,在那里做了一个月的寒假工,体验了农民工的生活。我是一个对未知事物有浓厚兴趣的人。当时有同学寒假不想回家想要去做寒假工,我当时想着寒假回家也没什么事,而且自己毕业后可能也不会有机会去体验做农民工了,就跟着他一块去了。本来想去的是深圳。但是带头大哥选择了昆山,做小弟的也没得选择啦。

从踏上去昆山的大巴,到到达昆山一路平静无事。但是在找工作的过程中却发生了问题。我们学校放假较晚,来到昆山这边后,基本上每个工厂的人都已招满。所以在体检面试的过程中有些严格,我们学校好多人都被筛选下来了。好吧,我能说我是幸运的么!我成功的面试上了。当时带头大哥给出的选择是,没面上的要么回家,要么去上海试试,面上的想留在这边继续做也可以,也可以回家或者跟着大部队去上海。当时面试上的大概有20人左右,因为大部队基本没有面上,要去上海或者选择回家。他们有些动摇大部分也选择了回家或者去上海。当时我选择留了下来,因为我觉得直接回家,何必呢,从学校出来饶了一大圈,什么也没得到就回家,不如在学校就直接回家。如果选择去上海前途未卜,也有面临着回家的风险。当时选择留在昆山大约5-6个人,因为分在了不同的厂,在学校又不怎么认识,以后的日子也没怎么联系。所以在那里的一个多月,自己基本是一个人度过的。

谈谈自己做寒假工或者说是农民工的感受吧:

有多少人知道电子厂的工作是什么样子么?

工厂的产线为了保证每天的生产效率最大化,基本上一个人一直做一道程序。电子厂产线上的大多数的工人都是18岁左右,正值青春。每天做着单点重复的工作。没有什么技术含量。也就是说就算你在这里做五年,十年,出了这个厂,你还是没什么拿的出的求生技能。当时自己内心的感触很大,在中国有多少这样的青年把他们的青春都浪费在了这样工厂里?也提不上去改变命运。正应了中国的那句古话:"爸爸是农民,儿子也会是农民。。。"(记不清啦,反正就是这个意思)。

改变命运是需要机会和环境的。看新闻北大的保安自学考上研究生的故事一样,如果没有北大的人文环境,而是在一个建筑工地当保安,我相信他连会去考研究生的想法都不会有。就好比现在农村家庭都希望自己的孩子考大学,因为这确实是一个去接触自己父辈没有接触过的世界,去对自己的人生发展产生一些影响

也想过为什么他们不出去找一个可以学到真正技术或者去培训学一门手艺呢?想想也发现,不是他们没想过,文化程度没有达到一定的程度的情况下,视野或者思想是不会发散的,他们每天想的可能就是我要怎么做好手头的事。

因为普遍文化素质不高,在产线上领班骂人是很经常的事情。对于脾气好的人还行,但是脾气坏的人就不好啦。有可能爆发暴力冲突。我在那里的一个月时间,就经历了两起。其中一次就发生在自己身边。

打工者有自己的梦想么?

曾经有一个小我两岁的男孩子,每天都拉着他的女朋友转战产线各个角落。虽然小我两岁,但是看起来却比我成熟多了。有的时候聊天,问他的梦想是什么。他说:"他过年不回家就是为了多赚些钱,拿年终奖。然后领着女朋友回家结婚。能在家里做点小生意,跟父母在一块,不再在外面奔波。"。那些农民工也有他们自己朴实的梦想。他们没有,甚至都没有想过什么改变世界,创造伟大产品的梦想。

他们的梦想平淡,朴实,但是也很艰难。

曾经有一个16岁的女孩坐在我对面的工位。小女孩给长的健谈,每天都是"侯哥,侯哥。。。"的叫,还会帮我做一些工作,我都有点不好意思。能力超强一个人可以干两个人的工序,或者做男孩子才去干的活。问过她一个关于梦想的问题?回答让我吃惊。16岁已经跟几个男孩子谈过恋爱了。而且他现在也想要赶快结婚(让我可悲的是,我大学四年竟然都没有谈过一次恋爱,有的也是默默的暗恋),不在外面奔波。对于一个16岁的女孩来说,我不知道在他们心中的结婚是一个什么样的概念,但是我猜想,如果她这么早的结婚,将来她的生活差不多也会跟她的父辈生活差不多吧,如果有了孩子,也可能像她父母一样把自己对生活的希望寄托在自己孩子身上。

离职那天路过职工活动中心,好多人在唱歌,听了一会儿,突然间有点伤感(没办法,自己就是一个敏感的人)

05170553-d28e92417fde42069cafe2de156a632

离职后拿到的离职单,农民工体验生活在那一刻也算是结束了

05170701-224cdb509cd945f3beec97821dc8581

3)骑行,看电影?p>阅读更多内容

没有评论:

发表评论