Android 为什么可以';我的SurfaceView&x27;s游戏循环运行一个像样的FPS?

Android 为什么可以';我的SurfaceView&x27;s游戏循环运行一个像样的FPS?,android,surfaceview,frame-rate,game-loop,Android,Surfaceview,Frame Rate,Game Loop,我已经拼凑了一个简单的游戏循环,主要使用了一些似乎是最早出现的技术,特别是在《Java杀手游戏编程》一书中,在本教程中我刚刚发现: 只是一个简单的,定时的游戏循环,带一个缓冲区 问题是它不会以良好的FPS重新绘制屏幕。我能从我的摩托罗拉Xoom中得到的最好速度是15FPS,目标是24 如果我将后缓冲区的大小减半,那么速度会大幅提升,因此我想这可能与利用Xoom上的屏幕有关(我的SurfaceView的大小为1280x727)。。。然而,其他游戏在同样的规模下运行得非常好 我没有任何其他设备可以测

我已经拼凑了一个简单的游戏循环,主要使用了一些似乎是最早出现的技术,特别是在《Java杀手游戏编程》一书中,在本教程中我刚刚发现: 只是一个简单的,定时的游戏循环,带一个缓冲区

问题是它不会以良好的FPS重新绘制屏幕。我能从我的摩托罗拉Xoom中得到的最好速度是15FPS,目标是24

如果我将后缓冲区的大小减半,那么速度会大幅提升,因此我想这可能与利用Xoom上的屏幕有关(我的SurfaceView的大小为1280x727)。。。然而,其他游戏在同样的规模下运行得非常好

我没有任何其他设备可以测试,所以我现在有点为难


我做错了什么/遗漏了什么/不知道什么?

需要一些代码,但我怀疑您没有使用任何线程?如果您不使用线程,那么由于所有处理都在同一个线程上,您的程序将不稳定并经常崩溃


简而言之,请确保您创建了一个新线程,我使用OpenGL,它需要一个线程,因此这可能是您的最佳下线路径

可能是位图和曲面的像素格式不同,导致在绘制位图时进行转换?这肯定会导致开销。试着尝试一下,看看这是否有帮助


由于位图使用的是
bitmap.Config.ARGB_8888
,因此可以尝试将曲面保持架格式设置为
PixelFormat.RGBA_8888
。或者,如果可以,请尝试使用
Bitmap.Config.RGB_565
PixelFormat.RGB_565

对。我正在使用线程。。我没有发布任何代码,因为我的实现与指定的链接非常接近。配置文件!Traceview是你的朋友。在你用更多信息分析更新你的问题之后,我从分析程序中了解到,将98%以上的负载用于将缓冲区绘制到SurfaceView画布上。这是一笔巨大的财富。非常感谢。我将缓冲区位图的格式更改为RGB_565,它可以平滑地运行到每秒50帧左右。很好!也就是说,要小心可能的兼容性问题。如果您更改默认像素格式,那么我建议您在多个设备上进行测试。我想在你的情况下应该没问题,但在使用OpenGL做类似的事情时,我已经遇到了一些颜色问题。你在这里的回答帮助我解决了一个不相关的问题,所以+1。通过在我的
SurfaceView
中应用
PixelFormat.RGBA_8888
,我消除了一个令人讨厌的渐变色带,因为
SurfaceView
显然不是默认的ARGB_8888。