背景
在学习马哥的wms/ams深入专题课程时,在最后一节课实现简易版本的多屏互动时候,有一个学员提出一个多屏互动时候为啥原生的那种方式会有闪黑问题呢?
这个场景下的其实闪黑问题其实大部分同学都可能还没在意过,马哥这边刚好把这种闪黑问题拿出来给大家作为一个闪黑问题实战作业的案例。
这样各位学习了wms学员都可以有条件进行这个实战作业的完成,相关的答案和讨论可以到1个星期后私聊马哥或者vip群里会有相关的通知。

复现问题环境
1、打开多屏模式,并且桌面打开短信Activity
2、查看确定短信Activity的task ID
先看看当前top Activity对应的task的id
test@test:~/disk2/aosp14$ adb shell am stack listRootTask id=14 bounds=[0,0][1440,2960] displayId=0 userId=0 configuration={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h774dp 560dpi nrml long port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1440, 2960) mAppBounds=Rect(0, 0 - 1440, 2792) mMaxBounds=Rect(0, 0 - 1440, 2960) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} s.34 fontWeightAdjustment=0} taskId=14: com.android.messaging/com.android.messaging.ui.conversationlist.ConversationListActivity bounds=[0,0][1440,2960] userId=0 visible=true topActivity=ComponentInfo{com.android.messaging/com.android.messaging.ui.conversationlist.ConversationListActivity}RootTask id=1 bounds=[0,0][1440,2960] displayId=0 userId=0 configuration={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h774dp 560dpi nrml long port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1440, 2960) mAppBounds=Rect(0, 0 - 1440, 2792) mMaxBounds=Rect(0, 0 - 1440, 2960) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0} s.34 fontWeightAdjustment=0} taskId=11: com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher bounds=[0,0][1440,2960] userId=0 visible=false topActivity=ComponentInfo{com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher}RootTask id=2 bounds=[0,0][1440,2960] displayId=0 userId=0 configuration={1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h774dp 560dpi nrml long port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1440, 2960) mAppBounds=Rect(0, 0 - 1440, 2792) mMaxBounds=Rect(0, 0 - 1440, 2960) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} s.34 fontWeightAdjustment=0} taskId=3: unknown bounds=[0,0][1440,2960] userId=0 visible=false taskId=4: unknown bounds=[0,2960][1440,4440] userId=0 visible=falseRootTask id=12 bounds=[0,0][1440,2960] displayId=2 userId=0 configuration={1.0 310mcc260mnc [en_US] ldltr sw1082dp w1082dp h2167dp 213dpi xlrg long port finger qwerty/v/v dpad/v winConfig={ mBounds=Rect(0, 0 - 1440, 2960) mAppBounds=Rect(0, 0 - 1440, 2885) mMaxBounds=Rect(0, 0 - 1440, 2960) mDisplayRotation=ROTATION_0 mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0} s.34 fontWeightAdjustment=0} taskId=13: com.android.launcher3/com.android.launcher3.secondarydisplay.SecondaryDisplayLauncher bounds=[0,0][1440,2960] userId=0 visible=true topActivity=ComponentInfo{com.android.launcher3/com.android.launcher3.secondarydisplay.SecondaryDisplayLauncher}上面可以看出这里的最顶部短信task的id为id=14 。
3、使用命令进行多屏移动task
使用am 的命令进行移动的task,把短信从主屏移到副屏
adb shell am display move-stack 14 24、闪黑现象确认 执行命令后,明显发现主屏有一个闪黑的现象

那么下面的作业就是针对上面一个闪黑问题进行修复。
作业要求
本次作业主要就以以下几个点来进行:
1、请复现出闪黑问题,而且说明的出am display move-stack 命令的源码和原理分析
2、使用dump sf或者winscope等工具分析出闪黑问题
3、工具分析出黑屏的直接原因,结合代码分析出根本原因
4、给出相关的优化修复方案,并进行验证
相关作业讨论及答案公布,请关注vip学员关注群消息
更多vip免费系统开发经典大厂面试题库获取,课程优惠购买成为vip学员进入vip群,积极讨论各种行业难点痛点疑难问题,答疑服务等。
请联系马哥微信:


夜雨聆风