自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

翻译 Jetpack 库 说明

jetpack

2022-07-12 10:48:12 201

原创 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 204

原创 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 135

原创 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 494

原创 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 314

原创 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 147

原创 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 93

原创 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 111

原创 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 100

原创 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 165

原创 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 125

原创 Android 12 input子系统梳理5 -- InputDispatcher处理的事件

InputReader将input event放到InputDispatcher的mInboundQueue后唤醒InputDispacher,然后InputDispacher开始分发事件。主干调用流程见箭头方向,简单来说就是InputDispacher将事件再次封装,使用InputChannel通过socket将事件发送出去。上层处理完事件后要再通知到InputDispacher,让他将事件从等待队列waitQueue中移除出去,完成事件闭环处理。接着进行继续下一轮事件的分发处理。.

2021-05-10 09:15:36 124

原创 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 198

原创 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 137 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 247

原创 Android 12 input子系统梳理1-- Input子系统基本介绍

前言: 之前在android2.3/4.0上梳理过IMS(inputManagerService),后来在其他版本上零星的分析过一些知识点。现在在android 12上再次系统梳理一遍,参考了很多同学的blog和节选了部分内容,感谢!(因为很多同学的描述和绘图已经很完美了,我也没必要重写一遍了<狗尾续貂>,只能复制过来,冒犯之处还请原谅!)Input子系统处理输入事务,任何输入设备的驱动程序都可以通过Input输入子系统提供的接口注册到内核,利用子系统提供的功能来与用户空间交互.

2021-05-09 16:21:10 482

原创 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 130

原创 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 296

原创 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 272

原创 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 377

原创 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 213

原创 6572 Phone call分析

6572 Phone call分析 目 录1. 概述 41.1 Phone Call 41.1.1 框架介绍 41.1.2 功能说明 52. 4.2呼叫相关类分析 62.1 基本知识 62.1.1 文件说明 62.2 DialtactsActivity 72.2.1 onCreate 72.2.2 其他 102.3 CallManager 11

2014-03-09 18:10:23 2782

原创 6572_message_MWI (Message Waiting Information)

6572_message_MWI  1. 前言1.1 目的    本文介绍了一个mwi的接收过程,主要关注的是消息从modem上报到APP的主要处理流程。实际在总结的时候,先讲RIL层是如何处理mwi的消息的,并如何处理并传递给framework的,再一步步分析,framework里事件是如何传送到app的,APP是怎么收到事件并显示的。 文档注重事件流程,描述了事件是

2014-03-09 17:43:51 1473

原创 6572_Telephony

6572_Telephony 1 术语和前言: 42 TelePhony: 42.1 Telephony框架 42.2 Phone介绍 62.3 Message 92.4 Call 92.5 Network States 92.6 Data Connection 102.7 Simcard 122.8 PhoneNotifier 122.9 Te

2014-03-09 17:14:10 1819 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除