欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android 从触摸到开始滑动 软件层分析

程序员文章站 2022-07-05 09:40:41
问题点:当铜柱开始移动到界面开始滑动时间比对比机慢。已经确定硬件无太大,TP报点率无差异的情况下,从软件开始分析。分析:1.从systrace看到差异第一点与第二点之间确实比对比机差(systrace分析touch事件)。2.打开开发者模式,打开touch位置显示,从高速相机拍摄的视频客户看到滑动相同的距离,对比机更快的显示坐标变动。原因:1.屏幕(TP)尺寸差异。不同的屏幕尺寸滑动相同的距离报点数量不同。2.密度差异:对比机adb shell getprop ro.sf.lcd.....

问题点:
当铜柱开始移动到界面开始滑动时间比对比机慢。
已经确定硬件无太大,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

相关标签: android performance