自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android11 SplashScreen 的显示和退出流程

首先对surface进行赋值并清空一些变量,startingSurface是前面通过createStartingSurface得到的SplashScreenSurface对象,然后调用SplashScreenSurface的remove方法。应用的启动到显示到屏幕是需要一定的时间的,为了提升用户的体验,google加入了启动窗口,也就是SplashScreen。可以看出,SplashScreen的添加和系统窗口的添加是一样,都是调用addView去添加一个窗口。

2024-07-12 15:17:30 859

原创 Android11 应用启动流程

这是因为在启动新进程那条调用链上,如果上一个应用还没暂停,就不会继续往下执行,所以应用暂停完成之后,需要再次调用确保真正启动应用的地方会继续往下执行。Android 11 在AMS和Activity之间的跨进程通讯有变动,现在是采取事物的方式,scheduleTransaction用于传递事务,注意第三个参数,最终导致PauseActivityItem的execute方法被执行。也是采用事物的方式,和应用进程相互通信,最后去执行Activity 的 onCreate,onResume生命周期。

2024-07-10 17:50:19 833

原创 Android11 窗口动画

首先创建LocalAnimationAdapter对象,LocalAnimationAdapter对象中的mSpec成员是WindowAnimationSpec对象,WindowAnimationSpec对象中的mAnimation成员是上一步创建的Animation 对象。首先创建leash图层,然后调用LocalAnimationAdapter的startAnimation继续处理,注意传入的mInnerAnimationFinishedCallback参数,后续动画完成后会回调里面的方法。

2024-07-09 18:22:48 902

原创 Andorid 11 InputDispatcher FocusedApplication设置过程分析

在Input ANR中,有一类ANR打印的reason 为 “xx does not have a focused window” ,表明 输入事件 5s 内,只有FocusedApplication,而没找到focused window。本文分析下FocusedApplication的设置过程。key事件的传输过程中,去查找焦点app时,就是在该容器中查找。setFocusedApp被几处地方调用,最常见的就是打开应用时,在realStartActivityLocked方法里面调用。

2024-07-08 15:07:22 368

原创 Android13 WMS窗口层级树

首先也是创建临时的叶子PendingArea,leafType默认为LEAF_TYPE_TOKENS,在typeOfLayer方法中,对于IME和Application 有处理,将其leafType设为LEAF_TYPE_TASK_CONTAINERS和LEAF_TYPE_IME_CONTAINERS。注意对于这两种类型,有特殊的处理,mSkipTokens设置为了true,后续将临时的结构树转成真正的层级树的时候有用。构建层级树的核心就是该方法,来分步分析它。经过这一步,此时结构树的构造结果如下。

2024-06-23 17:58:08 992

原创 Android11 以Window的视角来看FallbackHome的启动

所以经过以上的调用流程,创建了一个home Task,其实home Task就是ActivityStack对象,然后挂载到DefaultTaskDisplayArea下。注释1处,parent为前面创建的FallbackHome Task,mStartActivity为前面创建的ActivityRecord,将ActivityRecord设置为FallbackHome Task的孩子。注释1处创建FallbackHome Task,mTargetStack为前面创建的home Task。

2024-06-17 13:55:08 815 1

原创 Android11 AudioTrack和Track建立联系

对于是客户端创建的内存,客户端使用 StaticAudioTrackClientProxy来管理,对于AudioFlinger创建的内存,使用AudioTrackClientProxy来管理。对于是客户端创建的内存,使用 StaticAudioTrackServerProxy 来管理,对于AudioFlinger创建的内存,使用AudioTrackServerProxy来管理。可以看出,共享内存可以由客户端申请,也可以由AudioFlinger申请。客户端通过mProxy来管理。

2024-06-03 17:20:43 525 1

原创 Android11 AudioTrack 创建过程

首先,通过声音属性,从mProductStrategies中找到strategy,然后根据strategy,找到对应的device。mOutputs中,支持该device的output可能有多个,通过getOutputsForDevices把它们找出来,然后调用selectOutput从中选择一个最符合的。综上,找到output的流程为: audio_attributes_t >>> strategy >>> device >>> output。2,根据device,找到output。

2024-06-03 15:12:04 437

原创 Android 11 Audio strategy配置解析

注释2处,创建ProductStrategy对象时,传入的名字就是gOrderedStrategies中各元素的名字,如:“STRATEGY_PHONE”,“STRATEGY_SONIFICATION”。注释3处,遍历前面得到的mVolumeGroups集合,根据名字进行匹配(用volumeGroup 的名字和“AUDIO_STREAM_VOICE_CALL”,“AUDIO_STREAM_BLUETOOTH_SCO”等进行匹配),找到匹配的volumeGroup。再来看一下图中各结构体的定义。

2024-05-31 11:33:34 937 1

原创 Android 11 AudioPolicyService 启动流程

在打开输出流的过程中,会得到HAL层的audio_stream_out对象,并将其保存在AudioStreamOut中,创建播放线程的时候,传入该AudioStreamOut,最后将播放线程保存到mPlaybackThreads中。在打开输出流的过程中,会得到HAL层的audio_stream_in对象,并将其保存在AudioStreamIn中,创建录音线程的时候,传入该AudioStreamIn。这个流程和上面的是一样的,最终调用到AudioFlinger的openInput_l处理。

2024-05-29 18:14:10 970

原创 Android 11 Audio音频系统配置文件解析

其中mHwModules保存的是modules标签下的每个HwModule,解析attachedDevices标签时,会根据其名字找到对应的DeviceDescriptor,然后根据这些DeviceDescriptor的type,分别放入mOutputDevices和mInputDevices中。注释1处,针对不同的Trait类型,就调用不同的子类的deserialize处理。回到modules的解析方法中,mixPorts标签解析完成后,调用HwModule的setProfiles保存解析的结果。

2024-05-28 18:43:54 1031 1

原创 Linux Alsa驱动框架

注册声卡时(调用snd_card_register),会从list链表中取出snd_device,并调用其ops的dev_register 函数,也就是执行snd_ctl_dev_register函数。对于录音和播放节点,都会调用snd_register_device往snd_minors数组中放入元素,播放节点对应的f_ops为snd_pcm_f_ops[0],录音对应的为snd_pcm_f_ops[1]snd_pcm_f_ops[0]对应的是播放,snd_pcm_f_ops[1]对应的是录音。

2024-05-27 14:59:54 356

原创 Android11 monitorInput 介绍

接收触摸事件真的一定需要窗口吗

2024-05-23 17:24:35 929 1

原创 Android11重复事件上报流程

可以看出,这里取出的是上次保存的事件,并根据上次事件的各个参数的值,重新生成KeyEntry,去重复上报。后续的上报处理流程就和之前的流程是一样的。需要注意的是,后续重复事件上报的间隔默认为50ms。大多数的按键驱动,即使按键一直按着,也不会一直上报事件,而是只上报一个down事件,那对于事件的重复上报,自然而然就交给了Android 的输入子系统。上面的方法只是保存了当前事件,并设置了下次上报的时间间隔是400ms,那再次上报是在哪里上报的呢?

2024-05-23 11:19:03 551

原创 Android11 事件分发流程

dispatchTransformedTouchEvent的含义是如果child是ViewGroup的话,就继续调用ViewGroup的dispatchTouchEvent方法继续向下分发,如果child是view的话,则调用view的dispatchTouchEvent来处理事件。deliver方法的原理就是输入事件会经过这些InputStage依次处理(调用onProcess方法),如果事件已经被上一个消费处理了,后面的stage就不会处理了。

2024-05-21 12:19:42 1269

原创 Android 11 触摸小圆点显示流程

当SHOW_TOUCHES 这个key的值有改变时,调用updateShowTouchesFromSettings方法,在updateShowTouchesFromSettings方法中,是调用nativeSetShowTouches这个native方法,直接来看下这个方法。小圆点的图片资源已经被加载,并将其保存在相应的变量中了,接下来就需要将其显示出来了。在开发者选项中,打开 “显示点按操作反馈” 开关,当我们在触摸屏幕时,会显示一个小圆点,来分析下小圆点的显示流程。

2024-05-21 10:10:55 931

原创 Android 触摸事件分离原理

查找到window2窗口后,因为window2也支持分离事件,所以也是进入注释2处的分支将isSplit 设为true,然后就是window2加入到tempTouchState中,该事件可分发至window2窗口。屏幕上存在多个窗口时,多指触摸的情况下,多个手指的触摸事件可以分给不同的窗口,以下面的图为例,第一个手指按下,window1可以响应这个事件,第二个手指按下(第一个手指不松开),window2同样也可以响应第二个手指按下的事件,两个手指的触摸事件被分离到了不同的窗口,这就是触摸事件分离。

2024-05-16 11:43:05 601

原创 Andorid Input事件 注入方法及原理介绍

如果APP不是放在系统源码中编译,直接使用这个方法的话,肯定是编译不过的,这时候我们可以借助Instrumentation类来实现模拟一个输入事件,例如注入一个MotionEvent 的down事件。3,对于自己应用内的事件注入,是有权限的,但是如果想注入事件到其它的应用,是需要申请INJECT_EVENTS权限的,而这个权限是需要系统签名的应用才能申请。在Android系统中,除了真实的输入设备可以产生事件之外,我们也可以通过软件的方式,模拟一个输入事件,比如模拟一个点击事件,模拟一个按键事件等等。

2024-05-14 12:14:05 349

原创 Android finishInputEvent 流程分析

事件处理完成之后,InputDispatcher将事件从wq移除的逻辑

2024-05-13 09:46:41 495

原创 Android11 InputDispatcher 分发事件流程分析

介绍对应触摸事件,InputDispatcher的处理流程

2024-05-10 16:05:07 888 1

原创 Android 11 输入系统之InputDispatcher和应用窗口建立联系

本文介绍InputDispatcher和客户端进程建立联系的过程,核心是通过socketpair产生两个fd

2024-05-09 17:07:34 1292 1

原创 Android11 InputReader分析

多指触摸类型InputReader线程情景分析

2024-05-08 16:07:48 998

原创 Android11 InputManagerService启动流程分析

InputManagerService的启动流程

2024-05-06 17:04:15 804 1

原创 Android getevent命令详细分析

介绍getevent读取内核输入数据的原理

2024-05-06 14:11:26 583

原创 Android binder死亡通知机制

本文分析了binder的死亡通知机制

2024-04-30 15:18:57 940 3

原创 Android 11 bindService 流程分析

本文主要介绍bindService的内部流程,以及onServiceConnected是如何调用到的

2024-04-28 18:12:13 1157 1

原创 binder 双向通信时客户端没有joinThreadPool也能接收到服务端的请求

原来在客户端远程调用say_hello方法后,就会通过waitForResponse等待服务端返回数据,而刚好,我回调的方法又是写在say_hello方法中,这就导致服务端在该方法内发出BC_TRANSACTION,那在客户端就会收到BR_TRANSACTION,进而正确的调用到对应的方法。但是今天我在用C++写binder双向通信的代码时,发现,我客户端并没有调用joinThreadPool或者startThreadPool,也能接收到服务端的请求,而且能正确的调用对应的方法,这是为什么呢?

2024-04-26 15:44:22 155

原创 Andorid UNIX SOCKET c代码进程和java代码进程之间通讯

一文的实战中,服务端和客户端的代码都是用C语言写的,而Androidd的系统源代码以及APP大多数都是java写的,那么不同的语言写的进程之间,能不能互相通信呢?java代码也是一样的,在connect方法中也是调用socket和connect 来和服务端建立连接。对于UNIX SOCKET ,C代码和Java代码之间是可以相互通信的,并且可以相互作为客户端和服务端通信。需要注意的是,address的Namespace默认为ABSTRACT,在调用connect的过程中,对于ABSTRACT,有以下处理。

2024-04-25 17:47:43 299 2

原创 Andorid进程间通信之 UNIX SOCKET

UNIX SOCKET实现进程间通信

2024-04-24 16:49:43 648 3

原创 Android binder 匿名服务实现双向通信

binder 双向通信介绍

2024-04-24 11:39:36 748 1

原创 Android AIDL传递类对象

Android 跨进程通讯传递类对象

2024-04-22 11:44:37 386

原创 binder java层数据传输过程

介绍binder在java层数据传输的流程以及如何调用到自己定义服务里面的方法

2024-04-18 16:59:21 1032 1

原创 binder c++客户端处理流程

binder c++处理流程,主要是分析getservice的过程

2024-04-17 15:41:55 288

原创 binder c++ 服务端处理流程

c++服务端的实现

2024-04-16 15:26:00 729

原创 binder驱动总结

binder驱动总结

2024-04-15 10:58:01 441

原创 binder 添加多线程支持

binder c语言实现添加多线程支持

2024-04-12 17:40:32 314

原创 binder 驱动情景分析-获取服务

客户端获取服务binder驱动分析

2024-04-12 15:10:17 621

原创 binder 驱动情景分析-注册服务

binder驱动分析之注册服务

2024-04-11 17:08:22 620 1

原创 Android 11属性系统初始化流程

属性系统初始化,创建共享内存

2024-04-07 17:58:21 1020

原创 Android 11 添加系统属性

介绍各个属性文件的生成过程,并介绍如何添加自定义的系统属性

2024-04-07 12:22:18 1327

containers窗口层级

containers窗口层级

2024-06-04

binder java端测试程序

binder java端测试程序

2024-04-18

binder通讯 c++源码

c++实现binder通讯

2024-04-16

c代码使用binder

c代码使用binder,添加多线程支持

2024-04-12

binder-c.zip

binder跨进程通讯C程序示例

2024-04-09

ST7701S_SPEC_ V1.1.pdf

ST77701S 转换芯片规格书

2021-02-25

1000Hz-0dB.wav

纯音乐,无增益,可用来测试喇叭的功率

2021-02-25

app-dev-release.apk

屏保apk,可以直接使用作为屏保

2021-02-25

RGB 接口波形图.pdf

rgb 屏的波形图,信号不对可参考

2021-02-25

readme.txt

px30 主板喇叭没声音排查方案

2021-02-25

空空如也

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

TA关注的人

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