我正在研究Android 2D游戏(+自己的简单引擎),并尝试找出安排绘图/更新机制(API 16+)的最佳方法,以使我的游戏动作流畅。
我使用自定义视图来使用Hardware Acceleration。 SurfaceView实现不是很有说服力。我研究了Android Graphics Architecture,它向我介绍了使用Choreographer的想法,但我不确定它是否与我的自定义视图和postInvalidate()
相结合。请注意,postInvalidate()
始终在UI线程上执行。
以下是我到目前为止尝试的不同方法:
postInvalidate()
(使用Thread.sleep(restFrameTime)
)Choreographer.FrameCallback
调用doFrame()
,调用postInvalidate()
Choreographer.FrameCallback
和一个状态更新每个帧的时间信息为doFrame(long frameTimeNanos)
。使用postInvalidate()
进行绘图。我很难找到最佳方法,因为性能跟踪(traceview,systrace,glTracing ......)很难理解,并且对于不同的设备和设置(例如省电模式)也非常不同。我还考虑使用postInvalidateOnAnimation()
,但我认为它已经使用了Choreographer.FrameCallback
您对该主题有何看法?对于API 16+的黄油光滑无抖动60 FPS游戏性能,你认为最好的方法是什么?我做错了吗?很难找到关于Choreographer实现的详细说明。