问题点:
 当铜柱开始移动到界面开始滑动时间比对比机慢。
 已经确定硬件无太大,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.澄清
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!