近期我们项目遇到了一个棘手的问题
背景:
我们是国际项目组团队,当用户在快速切换语言节目,同时在方控(方向盘控制)按下 home 停止时,会调起 widget 的 1/3 屏。
第一次分析:
根据测试组提供的视频和 log 日志,初步分析结果是,切换语言配置更改,导致页面重建。在重建的某一刻点击事件落在了 launcher 桌面上的 widget 控件上,随后拉起了 1/3 电话屏。
Launcher在切换语言后被启动,随后 10ms Launcher 启动了蓝牙1/3屏 Launcher进程号3023,而Launcher尽在卡片点击事件触发时拉起蓝牙电话应用,10ms基本可以确定两个事件是连续的,而非过程又有新的点击事件参与,且切换语言位置,与PhoneWidget重合
2023-01-01 03:09:28.297 872 22797 I ActivityTaskManager: START u0
{act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x14000000 cmp=com.autolink.launcher/.MainActivity}
from uid 1000 from pid 3023
2023-01-01 03:09:28.306 872 1141 I ActivityTaskManager: START u0 {act=android.intent.action.MAIN flg=0x14000000 cmp=com.autolink.bluetooth/.MainActivity (has extras)} from uid 1000 from pid 3023
2023-01-01 03:09:28.317 3023 3023 I Main_Launcher: onPause()
第二次分析
在车载屏上复现问题,刚开始根据测试提供的视频来复现,一手在屏上不停的切换语言,一手在终端上模拟方控操作,执行:adb shell 命令
PS C:\Users\EDY> adb shell am start com.autolink.launcher
执行几次下来,左右手不协调,达不到测试复现的效果。
思考一顿。。。
快速切换 -> home 键 -> 拉起 1/3 屏
根据这个线索,在拉起 1/3 屏的 down 事件和 up 事件分别打点记时
- 正常的 launcher widget 拉起操作,down 到 up 的时间差在 40~80ms 这个区间,最快的一次是 19ms ,之后再也没有出现过这个值。
- 从切换语言按 home 到出现 1/3 屏(这里拉起也是因为按 home 后,后续还点击过切换语言,切换语言的按钮位置正好就是 launcher widget 的位置)。这里计算 down 到 up 的时间差在 1~8ms 这个区间,最快的一次也出现过 0ms 。
从这个数据,基本可以想到两种解决方案:
- launcher 项目处理:当 down 和 up 的时间差小于 10ms 的事件丢弃
- 车设项目处理:当用户切换语言,到页面重建完成的时间段,禁用 DOCK 栏
如果你更好的方案,欢迎评论交流