(我尝试用关键字填充问题以防其他人遇到此问题 - 我找不到太多帮助。)
我在Android中有一个自定义视图,其中包含一个LED条形图,显示通过套接字通信接收的级别。它基本上只是一个剪裁的图像。级别越高,图像剪裁越少。
当我更新级别然后使视图无效时,某些设备似乎“收集”多个更新并以块的形式呈现它们。屏幕明显犹豫不决,比如十分之一秒,然后迅速画出多个画面,然后再次犹豫不决。它看起来像是不堪重负并丢帧。
然而,当更改屏幕上的另一个UI控件时,LED条形图更加频繁和平滑地绘制。我想Android正试图通过“收集”多个失效然后立即完成这些操作来帮助我。也许通过操纵控件,我只是通过赋予它“更多”来“增加”我的帧速率,因此它在实际油漆之间延迟较少。
与动画(平滑过渡)不同,我希望尽快显示绝对最新值。我的数据样本反正速度不超过10-20fps。
是否有一种简单的方法可以在某些点“强制”绘画,或者这是视图工作方式的限制?我应该在SurfaceView中实现它吗? (我还没有玩过那个......首先需要建议。)提前感谢您的建议。
(当天晚些时候......)
更新:我在文档中找到了一个建议实现我的小部件的页面作为SurfaceView的方法:
http://developer.android.com/guide/topics/graphics/2d-graphics.html
(之后一小时......)
SurfaceView对于我想要做的事情似乎有些过分。最佳实践方法是“拥有”整个画布,但我已经开发了其余的控件和布局,并且它们运行良好。必须有可能使用我所拥有的一些更好的性能,特别是因为与UI的交互使得重绘速度令人满意。
答案 0 :(得分:0)
事实证明SurfaceView
是要走的路。我在没有帮助的旧手机上进行基准测试。 (使用标准View
的帧速率在华硕eeePad上很好)。我不得不丢弃一些代码,但最终结果是SurfaceView
更平滑,更快。此外,我能够重复使用比预期更多的代码,并且实际上大大简化了我的多点触控处理代码(因为我想要触摸的所有内容都在同一个SurfaceView.
仅供参考:我仍然只在Droid X上获得大约15fps,但是一半的CPU负载似乎是数据包处理。 eeePad现在几乎达到了40fps - 我的数据速率只有20个样本/秒。
所以...我猜是一场胜利。我希望Droid X能够更好地运行,但它会在真正的平板电脑上运行。