【问题标题】:How to detect stuttering programmatically?如何以编程方式检测口吃?
【发布时间】:2012-03-14 03:03:42
【问题描述】:

当我查看 ListView 并滚动它时,如果它很明显,我知道它会卡顿。但有时当它不那么明显时,让我感到困惑是否滚动口吃?也就是说,如何检测帧是否丢失?

有没有办法以编程方式检测这种口吃?我已经阅读了"How to discover if OpenGL ES frame rate is stuttering - without Instruments?",但我认为它不适合 Android 中的 ListView 等 2D 视图。

【问题讨论】:

  • 我在处理我的 ListViews 时注意到的是,每次垃圾收集器运行时它们都会“断断续续”。这是有道理的,因为这意味着系统正在花时间做其他事情而不是渲染您的视图。您可以检查 LogCat 以查看您的情况是否也发生了这种情况。
  • 这确实是一个线索,但对我不起作用。 GC 没有发生,而我感觉口吃确实发生了。

标签: android detection frame-rate


【解决方案1】:

一种方法(我没有测试过)是扩展您拥有的 ListView,覆盖 drawonDraw 方法,并检查它在一秒钟内被调用了多少次。任何低于每秒约 25 帧的内容都意味着它会卡顿。

同样值得一提的是,几乎总是可以对 ListView 进行优化以避免在所有手机上出现卡顿(提示:检查适配器中的视图重用)

【讨论】:

  • FPS 低于 25 并不意味着发生了卡顿。考虑慢慢滚动主屏幕,确保 fps 甚至低于 10,但您不会注意到卡顿。我们可以让 ViewRoot.java 中的 SHOW_FPS=true 来显示当前的 fps。
  • 实际上,缓慢滚动主屏幕仍然会呈现最大帧数,即使您慢慢滚动。
  • 好的,但为什么是 25?是实际价值还是理论价值?
  • 25fps 应该是人眼所感知的。当然,我们每个人的情况都不同,但只是略有不同。这大约也是大多数电影所使用的。
猜你喜欢
  • 2021-03-24
  • 2019-03-24
  • 2014-06-25
  • 1970-01-01
  • 2011-02-16
  • 2013-06-28
  • 2014-06-06
  • 2018-12-22
  • 1970-01-01
相关资源
最近更新 更多