【问题标题】:Animation glitches while rendering on SurfaceView在 SurfaceView 上渲染时出现动画故障
【发布时间】:2014-11-11 07:58:34
【问题描述】:

FPS 约为 60,但动画有时仍会出现故障。我做了线程分析,发现在 Samsung S4Samsung S3 lockCanvas() 有时可能需要 20ms。 有什么具体原因吗?如何避免此类故障。

【问题讨论】:

  • 您是否通过休眠线程自己调节帧速率?我发现我只有 55 fps 与surfaceview 一致。否则,您将受到 cpu 速度的摆布,因此如果它决定它正在做太多工作并在锁定时间减慢某些帧或决定更快地处理一些其他帧,则会出现故障。如果你将帧速率降低到 30 fps,lockcanvas 时间会下降到 0-1 毫秒,并且不会再出现故障。你可以试试 Textureview (api 14),因为锁定时间只有 0-1ms 运行全油门(我必须调节帧速率,因为我的动画运行得很快)。

标签: android android-animation surfaceview


【解决方案1】:

某些设备,尤其是基于 qcom CPU 的设备,将通过lowering clocks 积极管理电源,因此当您的手指没有在触摸屏上主动移动时,您偶尔会看到 60fps 动画出现故障。

处理此问题的最佳方法是在必要时丢弃帧。 Grafika 中的“记录 GL 应用程序”活动使用 Choreographer 的一个简单技巧来执行此操作。详细解释请参见图形架构文档中的this appendix

我还应该指出,在 SurfaceView 表面上的 Canvas 渲染不是硬件加速的,并且随着像素数的增加,渲染时间也会增加,因此您更有可能错过窗口。在某些方面,增加的 CPU 负载实际上可以让事情变得更顺畅——如果电源管理认为设备负载过重,它不会降低时钟——但它确实会更快地耗尽电池。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2021-05-17
    • 2013-11-27
    • 2021-06-01
    • 1970-01-01
    • 2019-10-06
    • 2014-09-09
    相关资源
    最近更新 更多