王菊长
这个作者很懒,什么都没留下…
展开
-
Android 12 input子系统梳理15 -- Event -- 事件分发中的Event种类及 转换过程
如图,在Java层,主要有三个event容器:QueuedInputEvent是ViewRootImpl的内部类,由native发送过来。它存放native转发给的事件封装,一般情况,input dispatcher 每次发一个事件给App,等App处理完后发送下一个。但App侧可以合成或注入产生多个事件,所以使用了事件封装队列。/** * Represents a pending input event that is waiting in a queue....原创 2021-05-16 16:44:03 · 233 阅读 · 0 评论 -
Android 12 input子系统梳理14 -- Event -- 概述
Android屏幕交互事件主要有如下几种类型。key event 键盘、遥控器按键,鼠标点击会生成按键事件(key event)hover event 鼠标在屏幕上的停留、滑动会产生hover eventscroll event 鼠标滚轮的滚动会生成scroll eventtouch event 对触屏设备,当用户用手指或触控笔在设备屏幕上操作时会产生触屏事件(touch event)。实际上,在用android Java类表现事件时,只有下面两种类。Mo...原创 2021-05-16 16:41:09 · 164 阅读 · 0 评论 -
Android 12 input子系统梳理13-- “Consumer closed input channel or an error occurred events=0x8“
经常会在log里面发现"Consumer closed input channel or an error occurred . events=0x8"这样的信息。它代表什么样的含义呢?首先看报错的地方, 有两处报这个错误:1. InputDispatcher::handleReceiveCallback,int InputDispatcher::handleReceiveCallback(int fd, int events, void* data) {… ...原创 2021-05-16 16:27:03 · 571 阅读 · 0 评论 -
Android 12 input子系统梳理12 -- Input ANR -- focus event
ANR 问题 (可参见ANR专题,这里附上一个blog link)https://www.jianshu.com/p/b8b35d3ee052 一句话,ANR是在native层InputDispatcher里埋雷并捕获,通过jni通知到java层。https://zhuanlan.zhihu.com/p/53331495?from_voters_page=true这里简单分析一个Focus event ANR。Line 520288: 09-01 13:53...原创 2021-05-16 16:21:13 · 363 阅读 · 0 评论 -
Android 12 input子系统梳理11 -- InputChannel 补充分析 -- unregisterInputChannel
https://blog.csdn.net/u012439416/article/details/54606210?utm_source=itdadao&utm_medium=referral在启动一个acitivity时,将为该activity对应的窗口创建InputChannel,并和服务进程的InputChannel对应,这样就可以通过socket在客户端app和input子系统进行通信了。但是只有当前显示的acitivity才会获取事件,这就说明,在有一刻,会断开其他aciti...原创 2021-05-14 10:45:40 · 184 阅读 · 0 评论 -
Android 12 input子系统梳理10 -- Input – java-Touch Log
通过touch按键产生的调用栈可以更明确的了解上面的流程:点击屏幕上的一个view形成的调用栈:DialActivity$16.onTouch(View, MotionEvent) line: 3499ImageButton(View).dispatchTouchEvent(MotionEvent) line: 7701LinearLayout(ViewGroup).dispatchTransformedTouchEvent(MotionEvent, boolean, View, ...原创 2021-05-12 09:17:59 · 123 阅读 · 0 评论 -
Android 12 input子系统梳理9 -- Input子系统 java部分-TouchTarget介绍
Input子系统 java部分-TouchTarget介绍https://www.jianshu.com/p/172bfc4bba63 (TouchTarget部分博主写得很好,就直接复制了)子View拦截后,就会给单链表mFirstTouchTarget赋值。这个刚才已经说过了。逻辑就在addTouchTarget方法中,我们来具体看看: private TouchTarget addTouchTarget(@NonNull View child, int pointe...原创 2021-05-11 21:11:39 · 137 阅读 · 0 评论 -
Android 12 input子系统梳理8 -- Input 事件处理—view部分
在java层,事件传递从Activity 的 ViewRootImpl 开始,再到最顶级ViewGroup DecorView,通过其对应的activity和window,再到其view树的各子节点,最后才到具体的某个子View,最后由Activity收尾。根据子ViewGroup 的拦截状态和具体子view的处理状态,按照事件的处理结果,看事件是否继续在view树之间继续流转。即从ViewRootImpl 开始,事件依次经过了ViewRootImpl ,DecorView...原创 2021-05-11 21:07:51 · 124 阅读 · 0 评论 -
Android 12 input子系统梳理7 -- InputStage 处理事件
事件传递到ViewRootImpl,就靠InputStage按策略在view和窗口间传递了。 InputStage stage; if (q.shouldSendToSynthesizer()) { stage = mSyntheticInputStage; } else { stage = q.shouldSkipIme() ? mFirstPostImeIn...原创 2021-05-11 14:15:13 · 214 阅读 · 0 评论 -
Android 12 input子系统梳理6 -- InputChannel
从前面的对native的分析我们知道,InputDispatcher通过publishKeyEvent把input事件发送给客户端, InputDispatcher是属于system_server进程,而客户端属于应用进程,两种通信属于跨进程通信,采用的方式是socket。Java层使用InputChannel充当fd容器在进程间传输.所以虽然InputChannel名字是channel,实质上只是一个数据容器,并无实质功能性的作用。Native层的InputChannel则会调用sock...原创 2021-05-10 21:15:00 · 151 阅读 · 0 评论 -
Android 12 input子系统梳理5 -- InputDispatcher处理的事件
InputReader将input event放到InputDispatcher的mInboundQueue后唤醒InputDispacher,然后InputDispacher开始分发事件。主干调用流程见箭头方向,简单来说就是InputDispacher将事件再次封装,使用InputChannel通过socket将事件发送出去。上层处理完事件后要再通知到InputDispacher,让他将事件从等待队列waitQueue中移除出去,完成事件闭环处理。接着进行继续下一轮事件的分发处理。.原创 2021-05-10 09:15:36 · 174 阅读 · 0 评论 -
Android 12 input子系统梳理4 -- EventHub 及InputReader获取事件
https://www.jianshu.com/p/fb7071cc5785链接:https://www.jianshu.com/p/42d95cdca70bEventHub通过Linux内核的INotify与Epoll机制监听设备节点,通过EventHub的getEvent函数读取设备节点的增删事件和原始输入事件。InputManager构造函数中创建了InputReader和InputDispatcher,InputReader会不断循环读取EventHub中的原..原创 2021-05-10 09:13:18 · 254 阅读 · 0 评论 -
Android 12 input子系统梳理3 -- IMS初始过程
IMS 相关类初始过程如下:在SystemServer的初始化过程中,创建IMS和WMS实例。IMS通过jni,在native创建NativeInputManager实例,NativeInputManager创建了一个Eventhub,它可以读/dev/input/里面产生的事件,是input native层事件的输入模块。同时还创建了Inputmanager,Inputmanager则创建InputReader和InputDispatcher,并启动他们的线程looper。这样事件的读取和分发原创 2021-05-10 09:10:47 · 189 阅读 · 1 评论 -
Android 12 input子系统梳理2-- Android按键处理框架
参考: https://www.jianshu.com/p/5a879b7ad3b2Android input子系统的事件处理框图如下:上面的图涉及到4个非常重要的类,就是这四个类实现事件的读取和派发1.InputReader :这个类主要是从/dev/input目录下,读取所有设备产生的所有按键事件。并根据设备的不同(如键盘,单点触摸,多点触摸,轨迹球…)对数据进行处理和转换,并将事件发送给 InputDispatcher2.InputDispatcher :这个类主...原创 2021-05-10 09:08:21 · 294 阅读 · 0 评论 -
Android 12 input子系统梳理1-- Input子系统基本介绍
前言: 之前在android2.3/4.0上梳理过IMS(inputManagerService),后来在其他版本上零星的分析过一些知识点。现在在android 12上再次系统梳理一遍,参考了很多同学的blog和节选了部分内容,感谢!(因为很多同学的描述和绘图已经很完美了,我也没必要重写一遍了<狗尾续貂>,只能复制过来,冒犯之处还请原谅!)Input子系统处理输入事务,任何输入设备的驱动程序都可以通过Input输入子系统提供的接口注册到内核,利用子系统提供的功能来与用户空间交互.原创 2021-05-09 16:21:10 · 567 阅读 · 0 评论 -
android 11 Notification NMS#5: NMS – 数据容器
NMS – 数据容器Notification从产生到显示,数据存放使用了不同的数据容器,使用的类大致如下,Notification – StatusBarNotification / NotificationRecord -- NotificationEntry#1 在源app,使用的是NotificationNotification 存放源app需要在notification栏显示的具体信息。/*** A class that represents h...原创 2021-04-02 17:32:00 · 158 阅读 · 0 评论 -
android 11 Notification NMS#1: NotificationManagerService overview
NotificationManagerService overviewnotification的流程主要就是源app产生notification数据,通知到Server进程(系统进程)里NMS,再到systemUI模块来显示,主要关系如下:具体的调用和代码分析,很多参考文档都有详尽的描述。这里用图形来补充说明一下调用流程和类的层次关系。#1源app发起notification通知,通过AIDL跨进程到NMS#2 在NMS里,这个通知经过一系列的处理,再通...原创 2021-04-02 14:26:21 · 337 阅读 · 0 评论 -
android 11 Notification NMS#2: SystemUI部分-- NotifCollection
SystemUI部分-- NotifCollection在SystemUI收到来自NotificationListenerService 的notification通知后,还有一个listener会被通知到,即GroupCoalescer.GroupCoalescer 向NotificationListener注册监听器,它就会收到onNotificationPosted()通知,监听器mListener实际是NotificationHandler的实例,它将通知转发给NotifCollect.原创 2021-04-02 11:45:18 · 312 阅读 · 0 评论 -
android 11 Notification NMS#6: SystemUI部分—notification通知区布局相关
SystemUI部分—notification通知区布局相关通知区图标在StatusBar中的位置如图在android R上,运营商名字/时间区/通知区在一个布局group,通知区的宽度使用权重模式layout_weight="1"通知区只显示几个图标,不够用的用…表示。(通知区图标对应id notification_icon_area,默认情况下为空,它是一个自定义布局AlphaOptimizedFrameLayout,需要动态addview。)在stat...原创 2021-04-02 11:38:55 · 416 阅读 · 0 评论 -
android 11 Notification NMS#7: SystemUI部分—notification通知到view容器
SystemUI部分—notification通知到view容器这里我们主要看systemUI监听NMS得到的notification怎么添加到布局里面。前面讲了布局,加载的时候只加载到view容器,必须addview才能有notification的icon。#1 早期的版本通过updateNotificationIcons 来addview,android 11 没有触发到,另android11的 showIconCentered没人调用。NotificationIconAre..原创 2021-04-01 17:52:53 · 247 阅读 · 0 评论