Android 从触摸到开始滑动 软件层分析
问题点:
当铜柱开始移动到界面开始滑动时间比对比机慢。
已经确定硬件无太大,TP报点率无差异的情况下,从软件开始分析。
分析:
1.从systrace看到差异第一点与第二点之间确实比对比机差(systrace分析touch事件)。
2.打开开发者模式,打开touch位置显示,从高速相机拍摄的视频客户看到滑动相同的距离,对比机更快的显示坐标变动。
原因:
1.屏幕(TP)尺寸差异。不同的屏幕尺寸滑动相同的距离报点数量不同。
2.密度差异:
对比机adb shell getprop ro.sf.lcd_density : 440
测试机adb shell getprop ro.sf.lcd_density : 480
framework层的滑动参数:
mTouchSlop = res.getDimensionPixelSize(
com.android.internal.R.dimen.config_viewConfigurationTouchSlop);
默认8dp:
测试机:TouchSlop = 8 * 480/160 = 24像素
对比机:TouchSlop = 8 * 440/160 = 22像素
mPagingTouchSlop = mTouchSlop * 2;
测试机:mPagingTouchSlop = 24 *2 = 48像素
对比机:mPagingTouchSlop = 22 *2 = 44像素
同样条件,当滑动像素大于mPagingTouchSlop.开始滑动.
那么对比机会比测试机更快的达到滑动条件.
3.LCD差异:
对比机:90Hz刷新率+180Hz采样率
测试机:60Hz刷新率
同样的条件下,测试机会比对比机更快的显示界面内容.
4.Launcher差异:
Launcher差异是主要的差异.原生Launcher添加Log。
从log中可以看到
上报4~5个点之后开始滑动xDiff >touchSlop 开始滑动:
touchSlop = mPagingTouchSlop/2(已经优化)
第一次log分析:
determineScrollingStart xDiff = 1, touchSlop = 24
determineScrollingStart xDiff = 4, touchSlop = 24
determineScrollingStart xDiff = 11, touchSlop = 24
determineScrollingStart xDiff = 22, touchSlop = 24
determineScrollingStart xDiff = 35, touchSlop = 24
开始滑动
第二次log分析:
determineScrollingStart xDiff = 1, touchSlop = 24
determineScrollingStart xDiff = 8, touchSlop = 24
determineScrollingStart xDiff = 15, touchSlop = 24
determineScrollingStart xDiff = 28, touchSlop = 24
对比机是自己的Launcher,从报点显示判断,第一个点上报的时候就开始滑动。
解决方向:
1.Launcher中减少touchSlop数值。(可能存在风险)
2.澄清
本文地址:https://blog.csdn.net/wende32/article/details/108864637
上一篇: 记一次线上商城系统高并发的优化,从实战到解决统统涵盖
下一篇: Python展示文件下载进度条