![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
wms
文章平均质量分 79
千里马学框架
安卓架构师,安卓技术专家,android framework
展开
-
安卓Framework wms/ams实战作业布置-千里马学框架
2、如果当前应用在后台(注意一定要在后台,不能在前台),使用adb shell 命令进行kill进程发现只有应用的WindowState在结构树被移除,其他的ActivityRecord,Task就没有被移除。哈哈,确实平时没注意这个现象,看到他描述的这个结果有点意外,主要不影响上面运行,属于安卓自己设计机制,所以与我们想象的一旦进程都被杀了,那么层级结构树肯定不可以残留相关的Task和ActivityRecord。原创 2024-07-11 15:25:01 · 222 阅读 · 0 评论 -
android手机电视相框项目-学员做出个bug版本邀请大家review提意见
这个项目我说过不给提供答案哈,让各位学员朋友自己独立思考完成哈,因为尽量想让大家慢慢的要脱离每次可以抄袭马哥课程作业的习惯,这样才可以在以后framework工作中独立自主完成。上面就我们学员的成果和代码,让其他学员可以参考评估,在这基础上做出更好的相框手机和电视。明显在分屏情况等情况下会有画面显示异常,和正常屏幕显示画面有残缺部分。基本上看效果看着有相框的感觉了,功能应该算实现了80%本文章更多详细代码和资料需要购买课程获取。获取优惠下面公众号联系。原创 2024-07-06 11:27:15 · 328 阅读 · 0 评论 -
aosp 14的WMShell相关的proto日志如何查看打印-framework分屏相关
针对WMShell包下面的Proto日志,在高版本aosp14统一只能使用方式来开启,而且相关logcat过滤的TAG需要去看看具体对应TAG是啥。本文章更多详细代码和资料需要购买课程获取其他课程七件套专题:点击这里。原创 2024-07-02 11:42:44 · 655 阅读 · 0 评论 -
安卓分屏下Activity启动其他Activity为啥也在分屏下?-framework深入剖析
1、对于ActivityRecord来说相对非常简单,就是ActivityRecord的windowmode跟着Task混就可以了,Task的WindowMode是啥就是啥2、针对新创建的Task情况有点不一样,他们和启动这个新建Task的sourceTask有关系,如果sourceTask里面是分屏相关的task那么新建Task的的Parent就会变成和sourceTask的一样的rootTask,否则就是TaskDisplayArea即没有rootTask。本文章更多详细代码和资料需要购买课程获取。原创 2024-06-28 17:10:19 · 932 阅读 · 0 评论 -
Acitity跳转延时10s会导致anr的时序问题讨论
整个时序来说Activity的onCreate,onResume对应的LaunchActivtyItem的消息,在systemserver的realStartActivity就已经比focus的消息要早,导致app主线程早就有了onCreate,onResume的任务,focus消息还需要来回和sf跨进程后才可以到InputDispatcher,InputDispatcher。那么这个时候handler里面就有了相关的onCreate,onResume等执行的消息调用,都会在主线程执行。原创 2024-06-27 17:50:18 · 490 阅读 · 0 评论 -
ActivityRecordInputSink的触摸区域TouchRegion详细解读
到这里就完美解释清楚了ActivityRecordInputSink巨大区域是哪里来的,本质还是因为replaceTouchableRegionWithCrop设置成了true原创 2024-06-18 16:38:29 · 735 阅读 · 0 评论 -
安卓VirtualDisplay虚拟屏幕如何实现没有内容显示mirror屏幕内容(aosp13)
VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR设置1、会在DisplayContent的mApplySurfaceChangesTransaction中对Display是否有内容进行确定2、一旦涉及了Display的上有内容到无内容的变化会调用setDisplayLayerStack来重新设置layerStack3、在sf中layer会对layerStack进行匹配然后决定显示哪个Display本文章更多详细代码和资料需要购买课程获取。原创 2024-06-11 16:49:20 · 889 阅读 · 0 评论 -
vip学员作业--横屏下面怎么自适应展示竖屏应用方案征集(排除原生letterbox方式)
当前的原生letterbox确实一定程度上解决了竖屏app在横屏显示的问题,但实际上了各个应用后问题还是很多,特别是对各个app展示适配情况,一样有很多很多的ui显示问题。这个希望各位学员积极参与哈原创 2024-06-09 12:44:50 · 343 阅读 · 0 评论 -
安卓虚拟屏幕锁屏画面源码分析部分KeyguardPresentation
也就从SurfaceFlinger的图层中只可以发现一个线索,那就是这个图层本质是systemui负责创建的window,但是这个window的名字其实并没有,只知道systemui进程创建的。那么也不是我们自己自定义显示的,那这个画面到底在哪里?上面window相关的dump信息又相对多了一些线索,比如这里的 ty=KEYGUARD_DIALOG,即可以知道window创建的类型。在搞虚拟多屏和投屏相关业务时候,发现在锁屏时候一个画面比较特殊,但是明显我们自己也没有给虚拟屏幕和投屏有绘制过这个页面。原创 2024-06-07 13:42:13 · 638 阅读 · 0 评论 -
wms中对屏幕进行修改wm size设置屏幕宽高原理剖析
所以这里其实就是最核心的transform,有了它就可以把自定义的屏幕size和屏幕本身size进行统一,让1440x2960大小屏幕可以显示1080x1920屏幕大小内容。从上面一系列的dumpsys可以得出结论,一旦wm size成了新的屏幕size后,整个系统的大小确实变化了,连displayContent也是变化的。明显看到差异就是屏幕上下有黑边了,那么下面就来调研这个wm size是怎么做的的display大小修改的。原创 2024-06-03 18:55:38 · 598 阅读 · 0 评论 -
黑屏实战之横屏情况下分屏黑边问题bug-学员提供
hi,粉丝朋友们,学员们学习了wms、ams专题后,那么整个系统的闪黑,黑屏,部分黑等问题,说实话大部分这类问题对于大家来说都没有太大难度了。该问题其实属于比较常见的部分黑问题场景,这个比较好一点就是他可以在刘海屏幕下面是必现而且非刘海屏幕不复现,而且在稍微拖动分割线后,分屏又可以恢复正常,所以前后异常对比都很方便。大家自己尝试解决,找出原因哈,相关问题提供的学员,已经使用马哥课程的黑屏相关解决追踪方法找到了根本原因而且也修复,希望大家独立拿这个来练手哈,体验真正企业级别实战。环境aosp14 r15。原创 2024-05-17 09:58:57 · 562 阅读 · 0 评论 -
android.anim和android.anim.lf两个线程解析
在学员群中有学员朋友在分析systemserver的systrace和perfetto时候,提出了关于android.anim和android.anim.lf两个线程的相关疑问,主要是android.anim和android.anim.lf两个线程分别用于什么,有啥区别。其实上面的注释也讲的比较清楚了,核心就是为了动画更加流畅,改进成了动画不需要在单独依赖windowmanagerservice的大锁,所以独立出来了一个单独的动画独立线程android.anim.lf。android.anim还干些啥?原创 2024-05-04 17:07:16 · 792 阅读 · 1 评论 -
System Alert /Overlay系统悬浮窗口被隐藏原理剖析
在使用系统悬浮窗口时候发现有一个问题,那就是悬浮窗口在其他应用上面显示的好好的。一旦打开设置界面后,就发现悬浮窗口直接被隐藏了,退出设置画面后悬浮窗口又展示了原创 2024-04-20 08:00:00 · 473 阅读 · 0 评论 -
多屏模式输入法可以正确切换屏幕展示原理剖析
整个多屏输入法的流程涉及到了3个进程---->焦点app发起startInputAsyncOnWindowFocusGain------>systemserver stop老的service,start新service-------->输入法进程创建新的service onCreate执行------->输入法创建带有display的context-------->创建对于输入法窗口带有新的display更多framework干货获取相关可以 私聊+v(androidframework007)原创 2023-12-07 12:11:15 · 1496 阅读 · 0 评论 -
为啥一定要Activity的context才可以启动Dialog相关源码千里马带你站在高技术视角看问题
应用层面的Dialog就暂时分析到这里,我们分析的思路都是基于我们已经有了wms的较为深入的理解了,我们即可以站在更高的视角看问题,分析代码才有目的性,不会动不动太多代码,根本没办法准确分析到位,没有目的性,很有可能那就是你分析了很久代码,看了很多很多blog,你依然没办法抓到重点,你依然没办法串起来知识点。原创 2023-09-19 01:21:10 · 278 阅读 · 0 评论 -
winscope怎么实现user版本上导出方案设计探讨-千里马android framework车载车机手机系统开发
在马哥给讲解怎么用winscope来分析各种闪黑,黑屏等问题后,很多买课的同学都开始使用这个工具用于实际公司的项目了,但是很多同学又开始发现有一个问题,那就发现在user版本的手机设备上发现无法抓取相关的winscope,哪怕可以抓取也发现没办法导出来分析。上面已经分析了bugreport的原理,实际是借助dumpstate来实现获取高权限root的,那么问题来了,为啥wmtrace相关文件夹呢?首先需要了解点bugreport其实本质上也最多只能有shell权限,因为也属于adb shell拉起的进程,原创 2023-09-12 11:27:42 · 504 阅读 · 0 评论 -
android 10车载CarLauncher的ActivityView源码方案分析
前面的blog都是对于最新的android 13源码进行分析的CarLauncher的实现方案,已经知道CarLauncher使用是TaskView来装载新的地图Task,但是在android 12版本以前其实不是使用的TaskView的方案实现的,而是使用的ActivityView方案。原创 2023-07-27 11:17:49 · 443 阅读 · 1 评论 -
android framework车载桌面CarLauncher的TaskView详细源码分析
总结:上面几步最重要就是与systemserver端建立了联系,而且把相关的回调的mInterface传递到了systemserver端,这样systemserver端就可以在Task有变化情况下通过mInterface通知到客户端。上面第一步已经实现了CarLauncher可以监听Task的相关行为,注意这里肯定是所有的Task行为,但是TaskView它自身只关心Map相关的Task,那么这里是怎么精准通知的呢?通过这个cookie即可以精准的把系统回调的TaskInfo匹配到对应的TaskView。原创 2023-07-26 21:31:41 · 1268 阅读 · 0 评论 -
aosp11/12/13 壁纸高斯模糊,毛玻璃SurfaceFlinger层面原理-第二节千里马framework实战
hi,粉丝朋友们!上一个blog已经详细讲解了系统中自带相关接口实现窗口的高斯模糊相关效果,具体点击这里。原创 2023-05-20 16:55:28 · 815 阅读 · 0 评论 -
android13 FLAG_BLUR_BEHIND 壁纸高斯模糊,毛玻璃背景方案设计-千里马framework实战
这个FLAG_BLUR_BEHIND属于LayoutParams注释就是说FLAG_BLUR_BEHIND就会让在该window下面的window进行模糊具体如果要使用:其实就是对window的LayoutParams设置这个flag同时还有另一个方法setBlurBehindRadius大家都知道高斯模糊都有一个模糊滤镜,这代表模糊的程度,一般mBlurBehindRadius越大模糊层度越厉害。原创 2023-05-19 16:49:54 · 1413 阅读 · 3 评论 -
车机CarLauncher的Activity多屏模式WindowingMode为WINDOWING_MODE_MULTI_WINDOW疑问解析
hi,粉丝朋友们!今天来给大家介绍一下再Activity中WindowMode相关的多窗口模式,这个模式相对平时比较少见,但是在分屏模式之自由窗口模式,等存在多个窗口场景就很关键了。这一部分确实不是普通模式的场景,而且每一种模式都是比较难的,今天来分析一下WINDOWING_MODE_MULTI_WINDOW模式的一个疑问。原创 2023-05-17 09:56:51 · 2239 阅读 · 0 评论 -
众筹项目更新点
如果没有2个屏幕,则压根不触发任何移动操作。原创 2023-05-07 22:22:54 · 370 阅读 · 0 评论 -
车载多屏互动联动动画版本图层设计--众筹项目
hi,粉丝朋友们:上一节已经讲解了多屏互动动画部分的跟手动画和自动动画设计。本节来重点讲解一下最核心的图层设计相关。原创 2023-05-06 14:48:41 · 1529 阅读 · 0 评论 -
车载多屏互动联动动画版本同屏幕大小情况方案设计--众筹项目
主屏幕2的Task画面应该最右边往左边有offsetX的画面,所以左边原点相对屏幕偏移距离就应该是 -(width -offsetX) 注意这里应该是负数哈,因为屏幕最左边才是0。上面其实已经规划设计好了移动动画的流程,但是忽略了一个比较关键问题,那就是屏幕1的Task画面和屏幕2的Task画面从哪里来?主屏幕1是接受了双指触摸的右边移动了offsetX的距离,这时候屏幕1的Task画面也要跟着向右平移offsetX。动画主体画面:就是task的画面,动画过程中需要屏幕1和屏幕2都有在个task的画面。原创 2023-05-05 17:51:14 · 1825 阅读 · 2 评论 -
第二节-安卓多屏双屏实战车载车机智能驾驶舱开发/千里马android framwork开发
hi,粉丝朋友们!上一节已经对车载的多屏互动进行了相关的技术方案介绍,以及相关的核心方法moveRootTaskToDisplay的讲解和使用。本节就来进行代码实战。原创 2023-05-02 16:14:14 · 2599 阅读 · 0 评论 -
千里马android framework车机车载手机智能驾驶双屏互动实现方案
这个就是没有动画版本的双屏互动,功能其实也是实现的,但是体验是不是感觉起来差的太多,而且还带有黑屏。2、画面A的平移,两个屏幕都要进行显示,这个难度较大,得考虑好相关的画面怎么都可以显示在两个屏幕。这里其实不需要写代码,可以直接调用am display相关的命令即可以实现这个方法的调用。不过还好的是功能可以用,那么我们也根据wms课程基础后也来实现一下这个双屏互动的功能。1、多指全局动作监听,而不是在某个app的onTouch里面监听,这里其实之前的。原创 2023-05-02 11:52:55 · 3237 阅读 · 2 评论 -
WinScope实现录制视频与是Timeline时间轴同步设置方法-千里马framework车载手机系统开发实战
用到winscope工具,提出一个疑问,就是google官网说的有录屏可以结合起来一起看原创 2023-04-25 00:40:14 · 1068 阅读 · 2 评论 -
Android ProtoLog动态开启相关wm logging源码分析补充
针对上一节已经清楚了相关的代码中怎么可以打印到logcat中,其实本质上还就是protologtool这个工具对代码中的所有ProtoLog进行了相关的替换成了具体实现,最后会条件判断输出到Slog中。即使用类似命令:protologtool read-log --viewer-conf protolog.conf.json wm_log.winscope。viewer.json就是/system/etc/protolog.conf.json.gz。那么剩下就是protologtool命令哪里来的?原创 2023-04-19 00:49:50 · 1238 阅读 · 0 评论 -
android WMS中的Proto/ProtoLog/ProtoLogTool日志原理介绍
hi,前期学习WMS/AMS专题时候,日志相关讲解最多是就是ProtoLog相关,比如我们想要观看所有的configuration相关的日志,只需要用以下命令进行开启:更多内容qqun:422901085就是这里的ProtoLog打印日志,它的TAG就是WM_DEBUG_CONFIGURATION然后就可以通过logcat -s WindowManager看到相关的 ProtoLog.v(WM_DEBUG_CONFIGURATION所有打印。原创 2023-04-18 00:49:49 · 900 阅读 · 0 评论 -
Android Framework最难模块WMS实战作业-手机车机系统开发必备
0-课程整体介绍1-window-container.mp4 窗口层级树实战启动篇2-displayarea-feature.mp4 窗口层级树源码分析相关3-displayarea-draw-feature.mp4 窗口层级树绘制实战14-displayarea-draw-leaf.mp4 窗口层级树绘制实战25-displayarea-draw-leaf-2.mp4 窗口层级树绘制实战3。原创 2023-04-10 17:34:49 · 2918 阅读 · 0 评论 -
WMS实战之解决小米等国内桌面被强制横屏布局乱问题
所以就不得不跟着横屏显示。国内手机桌面基本不支持横屏,都是强制竖屏模式,所以对横屏基本没有适配对应的布局,所其实这些桌面是不希望看到有横屏情况展示出来,但是经常又会又一些小场景会导致桌面被强制横屏,所以看起来的体验比较差,就经常容易让测试提bug,用户体验也很糟糕。2、桌面支持横屏显示,这个理论是可以的,但是也不太现实,因为桌面横屏修改等需要波及面还是比较多的,很多都是业务类工作,工作量较大,而且也只是为了修改一个这个体验性bug,性价比低。那下面千里马就带大家开干,,把这个显示异常bug修复了。原创 2023-04-07 22:47:10 · 1379 阅读 · 6 评论 -
android 11/12/13系统屏幕旋转动画分析-车机手机系统工程师必备
然后跟着这个堆栈一直追既可以到startFreezingDisplayLocked,这个方法代表是冻屏,一般要进行屏幕整个旋转,肯定需要冻屏方便让我们整体画面进行动画。明显RotationLayer属于截图Layer,后面Activity属于DisplayContent的Layer,DisplayContent这个图层Layer执行动作是竖屏到横屏旋转,而ShotscreenLayer明显是又是横屏到竖屏的过程,具体可以看课程视频动画,这里blog就不上动画过程了。什么时候开始启动屏幕动画呢?原创 2023-04-05 22:26:40 · 1931 阅读 · 0 评论 -
InputWindowInfo从InputMonitor传递到SurfaceFlinger再传递到InputDispatcher
2、然后把数据java 的InputWindow数据转化native的InputWindow数据,通过一步步传递到transition中,即保存到了layer_state_t中。依次往下调用updateInputFlinger,会调用buildWindowInfos把当前所有的layer中获取数据转化到WindowInfo。这里较为简单,知识把对应的WindowInfo数据传递给对应的layer_state_t,其实对应就是Layer。接下来来到SurfaceControl.java的。原创 2023-03-31 00:31:01 · 946 阅读 · 0 评论 -
android 13 WMS/AMS系统开发-SplashScreen的添加与移除分析
在系统开发过程中大家要学会怎么来学习追踪代码,这一点是非常关键的,因为在庞大系统代码中,如果什么都进行正向分析,那么很有可能因为代码过于庞大,进入分支过多而导致丢失方向,失去了主要线路,陷入一种丢了西瓜捡到芝麻情况,这情况其实经常在分析系统源码时候常见,但是这其实对我们学习主流程来说是非常不利的,因为我们往往对代码执行的主流线路都还没有摸清,没有办法对流程有一个比较好的理解,而容易被执行某个小点,小部分卡住。这里我们既可以去看一下StartingSurfaceDrawer代码,然后从它的代码开始入手分析。原创 2023-02-16 00:11:12 · 1278 阅读 · 0 评论 -
Activity与AMS跨进程通讯方式更新部分
明显可以看出是靠handler中对EXECUTE_TRANSACTION的消息进行处理execute会最后执行到Activity的onResume。它一个transation 执行在mActivityCallbacks后。那么又是谁调用过来的?那肯定是systemserver的跨进程调用的。LaunchActivityItem它就包含要执行任务较多。那么EXECUTE_TRANSACTION消息谁发送的?首先可以看看onResume的调用栈是哪里调用过来的。如:ResumeActivityItem。原创 2023-03-17 00:04:54 · 379 阅读 · 0 评论 -
Window-animation总结
【代码】Window-animation总结。原创 2023-03-16 23:13:48 · 550 阅读 · 0 评论 -
千里马带你学framework:android 13 WM_SHELL_STARTING_WINDOW相关记录笔记
这里是为啥阿,因为高版本StartingWindow已经移殖到了Systemui进程,让Systemui来负责窗口创建相关,所以自然就wms端处理不了,要跨进程让systemui处理。这里注意,明显用wm开启时候,和正常wm相关的打印输出也是不一样的,明显显示是No IProtoLogGroup named WM_SHELL_STARTING_WINDOW。这个时候logcat -s WindowManager是没有这个shell相关打印,必须要。才可以打印出相关的Proto日志。原创 2023-03-12 13:14:34 · 1169 阅读 · 2 评论 -
android车机手机黑屏闪黑终结者-Winscope工具使用介绍
在开发过程中,经常会遇到各种各样的窗口问题,比如动画异常、窗口异常、闪屏、闪黑、黑屏、错位显示…对于这些问题,添加日志,调试分析代码等手段去解决,但这些 UI 问题往往出现在一瞬间,很难把握出现的时机,录制下来的日志往往也是巨大的,从海量的日志中提取有效的信息是一个枯燥且繁琐的事情,而且也根本没有办法把显示时间戳和日志时间戳完全对好。Android 也意识到了这个问题,WinScope 的出现有效的帮助我们跟踪窗口和显示问题。它向开发者提供一个可视化的工具,让开发者能使用工具跟踪整个界面的变化过程。原创 2023-03-09 22:42:03 · 3426 阅读 · 0 评论 -
android 13 WMS/AMS系统开发-WindowManagerService相关relayout操作
主要就有2个最关键步骤:1、创建对应Window的SurfaceControl2、计算出对应的window区域等,把inset和config传递回去。原创 2023-03-03 17:48:01 · 888 阅读 · 0 评论 -
android 13 WMS/AMS系统开发-WindowManagerService相关添加Window操作
【代码】android 13 WMS/AMS系统开发-WindowManagerService相关添加Window操作。原创 2023-03-02 11:59:09 · 659 阅读 · 0 评论