0

(我试图用关键字填充问题,以防其他人遇到这个问题 - 我找不到太多帮助。)

我在 Android 中有一个自定义视图,其中包含一个 LED 条形图,显示通过套接字通信接收到的级别。它基本上只是一个剪辑的图像。级别越高,图像被剪裁的越少。

当我更新关卡然后使视图无效时,某些设备似乎会“收集”多个更新并以块的形式呈现它们。屏幕明显犹豫了 1/10 秒,然后快速绘制多个帧,然后再次犹豫。看起来它不堪重负并掉帧。

但是,当更改屏幕上的另一个 UI 控件时,LED 条形图的绘制更加频繁和流畅。我在想 Android 试图通过“收集”多个失效然后一次完成所有这些来帮助我。也许通过操纵控件,我只是通过给它“更多工作”来“增加”我的帧速率,因此它在实际绘画之间的延迟更少。

与动画(平滑过渡)不同,我想尽快显示绝对最新值。无论如何,我的数据样本不超过 10-20fps。

是否有一种简单的方法可以在某些点“强制”绘制,或者这是视图如何工作的限制?我应该在 SurfaceView 中实现这个吗?(我还没有玩过......首先需要建议。)提前感谢您的建议。

(当天晚些时候……)

更新:我在文档中找到了一个页面,它确实建议将我的小部件实现为 SurfaceView 是要走的路:

http://developer.android.com/guide/topics/graphics/2d-graphics.html

(在那之后的一个小时……)

SurfaceView 对于我想做的事情来说似乎有点矫枉过正。最佳实践方法是“拥有”整个画布,但我已经开发了其余的控件和布局,并且它们运行良好。必须有可能用我所拥有的东西获得更好的性能,特别是因为与 UI 交互使重绘速度令人满意

4

1 回答 1

0

事实证明这SurfaceView是要走的路。我在一部没有帮助的旧手机上进行基准测试。(使用标准的帧速率View在华硕 eeePad 上很好)。我不得不扔掉一些代码,但最终的结果是使用SurfaceView. 此外,我能够重用比我预期更多的代码,并且实际上大大简化了我的多点触控处理代码(因为我想要触摸的所有内容都在同一SurfaceView.

仅供参考:我仍然只能在 Droid X 上获得大约 15fps,但 CPU 负载的一半似乎是数据包处理。eeePad 现在的速度几乎为 40fps——而我的数据速率仅为 20 个样本/秒。

所以......我猜是一场胜利。我希望 Droid X 运行得更好,但它可以在真正的平板电脑上运行。

于 2012-04-11T14:45:54.537 回答