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.澄清

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值