如何修复间歇性/生涩的Android油漆更新

时间:2012-04-09 16:47:22

标签: android graphics invalidation rate

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

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

当我更新级别然后使视图无效时,某些设备似乎“收集”多个更新并以块的形式呈现它们。屏幕明显犹豫不决,比如十分之一秒,然后迅速画出多个画面,然后再次犹豫不决。它看起来像是不堪重负并丢帧。

然而,当更改屏幕上的另一个UI控件时,LED条形图更加频繁和平滑地绘制。我想Android正试图通过“收集”多个失效然后立即完成这些操作来帮助我。也许通过操纵控件,我只是通过赋予它“更多”来“增加”我的帧速率,因此它在实际油漆之间延迟较少。

与动画(平滑过渡)不同,我希望尽快显示绝对最新值。我的数据样本反正速度不超过10-20fps。

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

(当天晚些时候......)

更新:我在文档中找到了一个建议实现我的小部件的页面作为SurfaceView的方法:

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

(之后一小时......)

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

1 个答案:

答案 0 :(得分:0)

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

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

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