- 博客(47)
- 收藏
- 关注
原创 【Android14 ShellTransitions】(八)播放动画
书接上回,话说当WMCore部分走到了Transition.onTransactionReady,计算完参与动画的目标,构建出TransitionInfo后,接下来就把这个包含了动画参与者的TransitionInfo发给了WMShell,然后就该播放动画了,这部分在WMShell。
2024-10-29 18:04:54 1004
原创 Android15使用Winscope
Winscope 是一款 Web 工具,可以让用户在动画和转换期间和之后记录、重放和分析多个系统服务的状态。Winscope 将所有相关的系统服务状态记录在一个跟踪文件中。使用带有跟踪文件的 Winscope 界面,您可以通过重放、单步执行和调试转换来针对每个动画帧检查这些服务的状态(无论是否有屏幕录制)。
2024-10-17 17:25:38 1291
原创 【问题分析】SetupWizard退出动画卡住【Android15】
所以原因出在SetupWizard的动画还在执行的时候, “com.google.android.setupwizard”和“com.ts.setupwizard.overlay”等一些App执行了一些disable App的操作,触发了全局Configuration的更新,导致SystemUI主线程去处理了configChanged相关的事务导致了阻塞。预期的情况是,setPosition的操作应该尽量在每一帧中都能进行,最终是界面的位置随着时间平滑的变化。
2024-08-30 09:24:36 979 2
原创 【问题分析】放大镜影响权限弹窗接收事件【Android14】
如图,打开google的放大镜功能,然后将该放大镜和权限弹窗部分重合,会发现权限弹窗的按钮如“Allow”,点击无响应。顺便一提,如果放大镜和权限弹窗完全重合或者完全不重合,是没问题的。
2024-08-30 09:02:58 1253
原创 【问题分析】关于SF侧Launcher层级的分析【Android15】
一般来说,SF侧的Layer层级和WMS侧WindowContainer侧的层级是一一对应的,但是对Launcher来说,则略有不同,这点之前我在打印SF信息的时候,也有注意过,但是没有去仔细思考过为什么会这样,直到这次分析问题的时候踩了一坑,才发现有必要梳理一下这块逻辑,并做个记录。
2024-08-30 08:51:23 1078
原创 【问题分析】leash影响壁纸显示+SF侧流程变更梳理【Android15】
锁屏界面调起Emergency界面,然后返回到锁屏界面,切换的过程中黑屏。
2024-08-30 08:48:22 1207
原创 【问题分析】CtsWindowManagerDeviceAnimations【Android15】
CtsWindowManagerDeviceAnimations.testRightEdgeExtensionWorksDuringActivityTransition报错:根据case的内容大概理解一下这个case的测试逻辑:启动一个名为EdgeExtensionActivity的Activity,这个Activity重写了动画,当播放动画时,EdgeExtensionActivity在X轴方向上被缩放到50%,并且边缘像素延伸到屏幕右边。
2024-08-30 08:41:59 1292
原创 【Android14 ShellTransitions】(七)Transition就绪
ShellTransitions Transition onTransactionReady tryPromote canPromote onTransitionReady
2024-07-15 10:34:11 1359 10
原创 【Android14 ShellTransitions】(六)SyncGroup完成
BLASTSyncEngine SyncGroup tryFinish finishNow TransactionCommittedListener CommitCallback
2024-06-21 18:36:36 1607 7
原创 【问题分析】WMS无焦点窗口的ANR问题 + transientLaunch介绍【Android 14】
transientLaunch transientHide startExistingRecents
2024-06-07 18:50:06 1407
原创 【Android14 ShellTransitions】(五)启动Transition
这一节的内容涉及WMCore以及WMShell,主要是启动Transition。回到ActivityStarter.startActivityUnchecked方法:看下最后启动Transition的部分,在ActivityStarter.handleStartResult中:只关注我们要关注的部分。
2024-05-23 11:56:19 2173 3
原创 【Android14 ShellTransitions】(四)Transition收集动画参与者
这一节的内容在WMCore中,现在Transition已经走到COLLECTING状态了,并且可以收集动画参与者了。那么Transition是在什么时候去收集动画参与者?回到我们最初的ActivityStarter.startActivityUnchecked:在调用了TransitionController.createAndStartCollecting后,紧接着就是调用了TransitionController.collect。
2024-05-23 11:51:29 1528
原创 【Android14 ShellTransitions】(三)Transition移动为COLLECTING状态
SyncGroup的相关内容我们在以前WindowContainerTransaction系列文章中那篇关于BLASTSyncEngine里其实已经比较细致的讲过了,不过这里还是再看下。
2024-05-23 11:45:59 1043
原创 【Android14 ShellTransitions】(二)创建Transition
还是我们之前说的,我们以在Launcher界面点击App图标启动某个App为例,来分析Transition的一般流程。在这一节中我们只分析和创建Transition相关的部分,即TransitionController.createAndStartCollecting的内容,余下的部分在其它章节中再进行分析。这一节的内容还是比较简单的,在WMCore侧,根据动画的类型创建相应的Transition对象,Transition的初始状态为STATE_PENDING。
2024-05-23 11:42:05 926
原创 【Android14 ShellTransitions】(一)开篇
说来惭愧,AndroidU都已经开发这么久了,但是我还没有整理过ShellTransition相关的知识。我本来希望能够系统的写一篇关于ShellTransition的笔记出来,但是发现一来这是一个比较庞大的模块,二来我个人能力有限,对ShellTransition目前掌握的并不透彻,只是朦胧上大体有一个认知。
2024-05-23 11:38:58 2776 5
原创 【问题分析】锁屏界面调起google语音助手后壁纸不可见【Android 14】
为系统和锁屏分别设置两张不同的壁纸,然后在锁屏界面长按Power调起google语音助手后,有时候会出现壁纸不可见的情况,如以下截图所示:有的时候又是正常的,但显示的也是系统壁纸,并非是锁屏壁纸。后面我本地多次尝试,发现了一些规律:1)、同时设置系统和锁屏壁纸为壁纸A,此时不会有问题。2)、在第1步的基础上,单独将锁屏壁纸设置为壁纸B,此时也不会有问题。3)、在第2步的基础上,单独将系统壁纸设置为壁纸C,出现问题。
2024-05-10 18:30:34 928 1
原创 【问题分析】TaskDisplayArea被隐藏导致的黑屏以及无焦点窗口问题【Android 14】
用户操作出的偶现的黑屏以及无焦点窗口问题。直接原因是,TaskDisplayArea被添加了eLayerHidden标志位,导致所有App的窗口不可见,从而出现黑屏和无焦点窗口问题,相关log为:这个log是MTK添加的,用来分析ANR问题还是非常有帮助的,对于分析黑屏问题同样有用。
2024-04-28 17:23:27 1315 3
原创 【问题分析】InputDispatcher无焦点窗口ANR问题【Android 14】
Monkey跑出的无焦点窗口的ANR问题。特点:1)、上层WMS有焦点窗口,为Launcher。2)、native层InputDispacher无焦点窗口,上层为”recents_animation_input_consumer“请求了焦点,但是”recents_animation_input_consumer“最终没有成为焦点窗口,原因是”NOT_VISIBLE“。
2024-03-27 09:50:41 1466 3
原创 【问题分析】InputDispatcher无焦点窗口ANR问题【Android 14】
Monkey跑出的无焦点窗口的ANR问题。特点:1)、上层WMS有焦点窗口,为Launcher。2)、native层InputDispacher无焦点窗口,上层为”recents_animation_input_consumer“请求了焦点,但是”recents_animation_input_consumer“最终没有成为焦点窗口,原因是”NO_WINDOW“。
2024-03-27 09:45:06 2168 2
原创 【问题分析】WMS无焦点窗口的ANR问题【Android 14】
Monkey跑出的Launcher ANR,场景为在Launcher界面,下拉状态栏,然后点击Notification,连续启动多个Activity,这些Activity均是启动后又快速销毁,导致的后续无焦点窗口问题。
2024-03-13 09:24:04 1279
原创 【问题分析】WMS无焦点窗口的ANR问题【Android 14】
Monkey跑出的 Launcher ANR,场景为在Launcher的Recents界面下一个Activity启动又快速销毁导致的无焦点窗口问题。
2024-03-13 09:15:19 1848
原创 【问题分析】WMS无焦点窗口的ANR问题【Android 14】
用户操作出的 Launcher ANR,场景为在Launcher界面一个Activity启动又快速销毁导致的无焦点窗口问题。
2024-03-13 09:06:29 967
原创 【Android 12】认识窗口
这里我按照自己的理解画了一下Android架构图,主要是对看下Framework这块:顶层是基于ApplicationFramework层的Apps层,ApplicationFramework是运行在App进程的Framework代码,如四大组件,各种Manager。在这一层,屏幕上的一块显示区域,典型代表是Activity,但是Activity毕竟是一个综合性比较强的概念,具体到内容显示这块还是由Window类负责,Window则是容纳View对象的容器。
2023-08-16 21:01:13 11242 1
原创 AndroidStudio查看AOSP的两种方法
本篇文章主要分享一些自己平时工作中使用AndroidStudio查看aosp的方法,同时抛砖引玉,希望知道其它便利有效的查看调试方式技巧的大佬们能够不吝赐教,大家互相分享,共同进步。如果直接用AndroidStudio打开aosp根目录,那么打开任意一个Java类,默认情况可能是这样的:Java文件的标签页显示图标为:表示“Java class located out of the source root”,并且其内部的成员变量之类的也没有被语法高亮。
2023-05-22 15:08:00 1231 8
原创 【硬件加速】3、DisplayList渲染过程分析【Android 13】
这次主要分析了DrawFrameTask的run函数的主要内容,即绘制流程从主线程切换到渲染线程后,渲染线程做了哪些工作:1)、之前我们构建RenderNode树的工作是在主线程上进行的,但是后续的绘制工作是在渲染线程上进行的,那么就需要将主线程收集到的RenderNode的信息同步到渲染线程,包括Properties和DisplayList等信息。2)、绘制之前,还需要向BufferQeueu请求一个图形缓冲区,对应BufferQueue的dequeueBuffer流程。
2023-05-19 11:35:55 1400
原创 【硬件加速】2、DisplayList构建过程分析【Android 13】
这里翻译一下源码中RenderNode的定义。RenderNode用来建立硬件加速渲染View层级结构。每一个RenderNode包含了一个DisplayList,以及一个影响该DisplayList渲染的属性集合。默认情况下,RenderNodes 在内部用于所有视图,通常不会直接使用。RenderNode用于将复杂场景的渲染内容分成更小的部分,然后可以用更小的性能损耗来单独更新这些部分。更新场景的某部分只需要更新对应的DisplayList或者一小部分RenderNode的属性,而不用从头全部重绘。
2023-05-19 11:29:48 10224 1
原创 【硬件加速】1、硬件加速渲染环境初始化过程分析【Android 13】
一看就懂的 OpenGL 基础概念(2):EGL,OpenGL 与设备的桥梁丨音视频基础 - 知乎 (zhihu.com)我们知道OpenGL是一组可以操作GPU的API,然而仅仅能够操作GPU,并不能够将图像渲染到设备的显示窗口上。那么,就需要一个中间层,连接OpenGL与设备窗口,并且最好是跨平台的。于是EGL出现了,由Khronos Group提供的一组平台无关的API,保证了OpenGL ES的平台独立性。
2023-05-19 11:26:34 1372
原创 【基础】1、App到SurfaceFlinger的连接【Android 12】
这个时候需要一张类图:1)、App通过IWindowSession接口和WindowManagerService进行交互,IWindowSession在服务端的实现是Session对象,每一个App进程在WindowManagerService都有一个对应的Session对象。
2023-05-18 19:59:20 856
原创 4【Android 12】ConfigurationContainer类
这个成员变量平时接触的很少,这里试着分析一下,可能有分析不对的地方,因此本节内容请慎重参考。/**包含了从WindowContainer层级结构顶层传到此container的合并的override configuration。它和mFullConfiguration不同的地方在于,它起始于层级结构中最顶层的那个container的override configuration,而不是全局configuration。
2022-12-30 19:06:57 2371 2
原创 DimLayer实现和setRelativeLayer分析【Android12】
WindowManager为App提供了一个可以在指定的窗口下插入阴影图层或者模糊背景图层的方法,达到使该窗口之下的所有窗口变暗或者模糊的效果,本文首先分析一下这种效果的大致实现,接着探究一下实现过程中涉及到的相对Layer的设置流程。
2022-10-27 14:21:38 2791 2
原创 7【Android 12】输入事件在App层的分发流程(三) —— KeyEvent处理流程
专注于KeyEvent是如何发送给View层级结构的,其他的暂时不关注。这里的mView是View层级结构的根VIew,对于Activity来说就是DecorView。
2022-09-08 10:35:26 1449
原创 6【Android 12】输入事件在App层的分发流程(二) —— MotionEvent处理流程
这里先将QueuedInputEvent中的mEvent向下转为MotionEvent类型,但从MotionEvent的注释来看,MotionEvent是用来报告移动(鼠标,笔,手指,轨迹球)事件的对象,覆盖的输入源似乎比pointer类型多。这里的mView是View层级结构的根VIew,对于Activity来说就是DecorView,对于非Activity窗口来说就是该窗口的自定义View,这里只分析最常见的Activity窗口。
2022-09-08 10:33:51 1036
原创 【Android 12】Activity启动模式
本文结合demo App和手机的实际情况(dumpsys activity containers),分析一下Activity的启动模式。
2022-09-08 09:34:05 10302
原创 3【Android 12】DisplayArea层级结构
DisplayArea类的继承关系,之前已经分析过,这里用一张简单的类图总结:既然DisplayContent是作为其代表的屏幕的DisplayArea层级结构的根节点,那么从DisplayContent出发,看一下这棵以DisplayContent为根节点的DisplayArea树是如何生成的。在DisplayContent的构造方法中,调用DisplayAreaPolicy.Provider.instantiate方法,去初始化一个DisplayArea层级结构。DisplayAreaPolicy.P
2022-09-08 09:33:28 3218 11
原创 2【Android 12】WindowContainer类
在代码搜索WindowContainer的继承关系,可以得到:除了不参与WindowContainer层级结构的WindowingLayerContainer之外,其他类都在本文有提及,用类图总结为:然后,将我们上面分析各个WindowContainer类时提供的说明图进行关联,可以得到:得到了一个简略版的WindowContainer层级结构图,这个并不真实反映手机的情况,因为这是按照我们上面的分析拼凑出的一张图,但是可以作为参考。
2022-09-08 09:33:04 11007 9
原创 1【Android 11】View层级结构
DecorView的View层级结构,从上面分析,其实是由三个层级结构组成的:1)、PhoneWindow根据Activity设置的主题风格,先生成了一个View层级结构,这部分是最顶级的;2)、我们自己定义的View层级结构,这个是根据我们通过Activity#setContentView中传入的xml类型的layout文件解析出的View层级结构,属于第三级;
2022-09-07 16:08:27 2567
原创 4【Android 12】【WCT的同步】BLASTSyncEngine
渣翻:用于收集将merge transactions的WindowContainers 的工具类。例如用于同步调整一个WindowContainer下的所有子WindowContainer的尺寸 :1)、打开一个新的同步集,并传递将被调用的listener:返回的ID最终会与一组准备好的WindowContainers一起传递给TransactionReadyListener,这意味那些WindowContainers已经调用了onTransactionReady。您还可以使用它来指代以后步骤中的操作。2
2022-09-07 16:00:43 10392
原创 3【Android 12】【WCT的应用】WindowOrganizerController
WindowContainerTransaction的应用,就是WindowOrganizerController读取WindowContainerTransaction中保存的信息,按照Transition、Change、HierarchyOp和BoundsChange这几部分进行分别处理。本文重点分析了Change和HierarchyOp部分,因为这两部分和分屏是重点相关的。
2022-09-07 15:59:52 10177 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人