- 博客(32)
- 资源 (4)
- 收藏
- 关注
原创 android 中的context
1234567891011/***/......Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型,是一个统领一些资源(应用程序环境变量等)的上下文该类实现了Context类的所有功能。= null) {............6.Context个数。
2024-04-26 10:45:00
808
原创 Android 13 Layer数据结构
Transform.mat33 的值由position和 matrix组成,由Layer 中的setMatirx和setPosition赋值。// dsdx(x的缩放) dtdy 0。// dtdx dsdy(y的缩放) 0。// tx(x的位置偏移) ty (y的位置偏移) 1。skewX: x轴的斜交因子(错切因子)scaleX: x轴的缩放因子。scaleY: y轴的缩放因子。skewY: y轴的斜交因子。
2024-04-25 09:45:00
908
原创 Android 14 transtion 动画流程
implements Transitions.TransitionHandler 的对象都会调用到startAnimation。根据上步计算出来的sortedTargets计算要做的动画TransitionInfo。此列表在开始做动画时候会判断里面的key,value是否满足做动画的条件。将符合条件的changeInfo添加到targets 返回。计算所有的到mChanges。
2024-04-24 15:15:43
2643
1
原创 Android 12 Starting window的添加与移除
其中调用到StartingSurfaceDrawer.addSplashScreenStartingWindow。然后调用到系统的WindwmanagerService的addView,执行添加窗口的流程。函数初计算了startingwindow的各种屏幕参数params,然后根据参数addWindow。
2024-04-24 15:04:17
629
2
原创 Android配置环境
执行命令:sudo mv /home/用户名/Downloads/android-sdk-linux /usr/java。sudo mv /home/用户名/Downloads/jdk1.8.0_271 /usr/java。执行命令:/usr/java/android-sdk-linux/tools/android。执行命令:tar -zxvf android-sdk-linux.tgz。执行 source /etc/profile。验证是否安装成功(我验证是成功的)执行:java -version。
2024-04-24 14:54:57
514
3
原创 Win & linux 下配置adb & fastboot
从8350开始,userdata增加了几个mount 选项,例如K2,fastboot -w可能会导致文件系统异常,进而出问题,可以使用。我的目录结构是在用户名下的adb_fastboot_linux下面,可根据需要设定。主机:Win10,除了adb fastboot需要设置变量之外,驱动直接安装即可。主机:Win10,除了adb fastboot需要设置变量之外,驱动直接安装即可。增加部分如红色部分,注意尾部是冒号不是分号,你们只需要添加 红色部分即可,例如我放在D盘adb_fastboot_win下。
2024-04-24 14:49:04
2178
原创 Android14 Handle机制
Handle是进程内部, 线程之间的通信机制.handle主要接受子线程发送的数据, 并用此数据配合主线程更新UIhandle可以分发Message对象和Runnable对象到主线程中, 每个handle实例, 都会绑定到创建他的线程中, 它有两个作用,:(1) 安排消息在某个主线程中某个地方执行(2) 安排一个动作在不同的线程中执行Handle, Lopper, MessegeQueue, Message的关系handle机制中, 主要牵涉的类有如下四个, 它们分工明确, 但又互相作用。
2024-03-06 21:01:05
1211
原创 WindowInsets的分发流程
普通的view肯定调用的是本身的onApplyWindowInsets。如果没有在分发(if ((mPrivateFlags3 & PFLAG3_APPLYING_INSETS) == 0)),那么针对windowInsets继续进行分发,并设定PFLAG3_FITTING_SYSTEM_WINDOWS,在View.onApplyWindowInsets方法内如果判断存在PFLAG3_FITTING_SYSTEM_WINDOWS标记,那么直接执行fitSystemWIndowInt方法。
2024-02-23 10:00:00
1511
原创 Android系统启动流程
zygote孵化的第一个进程是launcher进程,也就是桌面进程,在fork出Launcher进程后,AMS会向Surfaceflinger请求结束掉开机动画,同时显示桌面程序,这样就完成了系统界面的加载与显示。zygote孵化的第一个进程是launcher进程,也就是桌面进程,在fork出Launcher进程后,AMS会向Surfaceflinger请求结束掉开机动画,同时显示桌面程序,这样就完成了系统界面的加载与显示。1.首先按开机键后,引导芯片将引导程序从ROM中加载到RAM中。
2024-02-22 21:01:35
502
原创 Android14 InputManager-InputManagerService环境的构造
IMS分为Java层与Native层两个部分,其启动过程是从Java部分的初始化开始,进而完成Native部分的初始化。□创建新的IMS对象。□调用IMS对象的start()函数完成启动同其他系统服务一样,IMS在SystemServer中的ServerThread线程中启动。
2024-02-21 16:25:34
1347
原创 Android14 InputManager-ANR原理
目标窗口查找时,作为派发目标的窗口必须已经准备好接收新的输入事件,否则判定窗口处于未响应状态,终止事件的派发过程,并在一段时间后再试。倘若5s后窗口仍然未准备好接收输入事件,将导致ANR。直接引发ANR的原因有很多,例如Activity生命周期函数调用超时,服务启动超时以及最常见的输入事件处理超时等。下面从输入事件超时的角度讨论ANR的产生原因与过程inputANR 分为两种无响应anr: 应用连接正常但是未相应事件,并且发生了超时无焦点窗口anr: 当前有焦点应用,但是无焦点窗口,并且超时。
2024-02-21 16:07:54
1745
原创 Android14 InputManager-焦点窗口的更新
设置焦点时需要先设置焦点APPmFo-cusedApp是一个AppWindowToken,在WMS中用来表示当前处于Resume状态的Activity。它是由AMS在开始启动一个Activity时调用WMS的setFocusedApp()函数设置的。考虑以下应用场景,当用户从Launcher中启动一个Activity之后,在新Activity的窗口显示之前便立刻按下了BACK键。很明显,用户的意图是关闭刚刚启动的Activity,而不是退出Launcher。
2024-02-21 15:44:33
1708
1
原创 Android14 InputManager-InputDispatcher的分发
dispatchOnceInnerLocked()函数的实现解释了以下几个问题:□如果派发队列为空,则会使派发线程陷入无限期休眠状态。□即将被派发的事件从派发队列中取出并保存在mPendingEvent成员变量中。□事件有可能因为某些原因而被丢弃,被丢弃的原因保存在dropReason中。□不同类型的事件使用不同的派发函数进行实际的派发动作。如本例中的Motion事件使用dispatchMotionLocked()函数进行派发。□派发一个事件至少需要一次线程循环才能完成。
2024-02-21 15:28:41
1481
原创 Android14 InputManager-InputReader的处理
IMS启动时会调用InputReader.start()方法当线程开始运行后,将会在内建的线程循环中不断地调用threadLoop(),直到此函数返回false,则退出线程循环,从而结束线程。InputReader的一次线程循环的工作思路非常清晰,一共三步:□首先从EventHub中抽取未处理的事件列表。这些事件分为两类,一类是从设备节点中读取的原始输入事件,另一类则是输入设备可用性变化事件,简称为设备事件。□通过processEventsLocked()对事件进行处理。
2024-02-21 15:02:02
1588
原创 Android 14 WMS-Configuration 与ConfigurationContainer类
Android Configuration ( 手机配置信息 ) 是用来描述手机设备的配置信息的,比如屏幕方向, 触摸屏的触摸方式等,所有的窗口和activity都含有Configuraton。属性Manifest作用mccmccSIM卡相关(移动国家码)mncmncSIM卡相关(移动网络码)修改地区随着locale变化触屏类型keyboardkeyboard键盘类型变化(外接键盘)键盘是否显示的状态变化navigationnavigation。
2024-01-25 16:59:31
1654
原创 Android14 SurfaceFlinger的合成
BLASTBufferQueue::queueBuffer 成功后,通过 listener->addAndGetFrameTimestamps 通知Queue成功时间。追溯下此listen的历史。
2024-01-24 15:47:12
1534
原创 Android14 WMS 窗口布局流程performSurfacePlacement
以上就是对WindowManagerService中对所有窗口Surface固定工作流程的一些分析,主要还是对事务内的一些逻辑进行了重点分析。在整个过程中,充分利用了各个容器之间的关系和函数接口,从DisplayContent到叶子节点WindowState,进行了完整的遍历,完成了对所有Surface的摆放工作。
2024-01-23 18:06:53
2500
原创 Android14 InputManager SurfaceFlinger同步Windowinfo到Input
WMS通过 setInputWindowInfo将信息设置到SurfaceFlinger后是如何通知到Input的呢?如下图。
2024-01-22 21:11:42
766
原创 Android14 SurfaceFlinger Surface的创建
ViewRootImpl通过WMS创建surfaceControl然后通过surfaceControl创建BLASTBufferQueue让后通过BLASTBufferQueue.createSurface生成一个BBQSurface, 继承与Surface, 也就是创建了Surface, 最后返回给mSurface.BLASTBufferQueue是连接生产者和消费者的纽带。
2024-01-22 16:03:17
1472
原创 Android14 SurfaceFlinger的启动
由init进程启动,从main函数开始主要是初始化了Surflinger, 并启动了线程。
2024-01-21 21:01:02
2208
原创 Android14 InputManager-InputWindow的更新过程
InputDispatcher分发时间需要知道所有的窗口的信息, 而这些信息是由WMS更新到InputManager中的, 下面我们分析窗口信息更新的过程InputWindow类描述了窗口的布局信息, 包括创建口的位置窗口的大小, 是否有焦点等,是窗口存在在输入系统中的形式每个WindowState中都有一个InputWindowHandleWrapper 类。
2024-01-21 02:25:15
1490
原创 Android14 InputManager-InputChanel的建立
inputChannel是客户端窗口与inputDiapatcher传递的通道。本篇文章主要分析InputChannel的建立过程。从addView开始说起, 会调用到viewRootImpl的setVewViewRootImpl.setView函数首先生成一个InputChannel对象此时的对象是空的经过addToDisplayAsUser后将InputChannel赋值最后把生成一个mInputEventReceiver 用来接收input事件2.通过addToDisplayAsUser传
2024-01-20 23:11:59
1178
原创 Android 14 SurfaceFlinger-Layer visibleRegion的计算过程
涉及到的文件:frameworks/native/services/surfaceflinger/layer.hframeworks/native/services/surfaceflinger/layer.cppframeworks/native/libs/ui/Transform.cppframeworks/native/libs/ui/Transform.hSurfaceControl.setPosition -> android_view_SurfaceControl: setPositi
2024-01-20 21:13:34
1184
原创 Android14 AMS-activity的生命周期
这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗cpu的资源释放掉,以及保存一些关键数据,但这个方法执行的速度一定要快,不然会影响新的栈顶活动的使用。回调到ActivityThread的mAtmService.getLifecycleManager().scheduleTransaction(prev.app.getThread(),它在活动第一次被创建的时候调用,你应该在这个方法中完成活动的初始化操作,比如加载布局,绑定事件等。这个方法在活动准备好和用户交互时调用。
2024-01-12 16:30:06
733
原创 SurfaceFlinger的启动
dueTime判断callback是否需要立即执行,立即执行调用scheduleFrameLocked(now),通过DisplayEventReceiver.scheduleVsync()请求VSYNC信号,SurfaceFlinger在接收到请求信号后发出VSYNC信号,处理完请求后Choreographer不会接收到VSYNC,也就是说一个静止不刷新的界面是不需要接收VSYNC信号刷新的。waitMessage,通过采用一个死循环,处理Looper的pollOnce。但是中间有一个断层,就是。
2023-12-17 21:42:27
489
原创 Android14 SurfaceFlinger-App到SurfaceFlinger的连接
这里调用了native层的ServiceManager去获取名为“SurfaceFlinger”的服务,这里能看到ISurfaceComposer的服务端实现便是SurfaceFlinger服务。在Client内部则通过sp类型的成员变量mFlinger保存了一个SurfaceFlinger的引用,Client也可以直接操作SurfaceFlinger。1)、首先创建一个SurfaceComposerClient对象。这里最终会调用到SurfaceFlinger的服务。
2023-12-17 00:17:15
793
原创 窗口的布局
以上就是对WindowManagerService中对所有窗口Surface固定工作流程的一些分析,主要还是对事务内的一些逻辑进行了重点分析。在整个过程中,充分利用了各个容器之间的关系和函数接口,从DisplayContent到叶子节点WindowState,进行了完整的遍历,完成了对所有Surface的摆放工作。
2023-12-11 00:31:15
1349
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人