在较慢的设备(橙色旧金山又名ZTE Blade)上测试我的游戏,我得到了令人震惊的帧速率。

我在调试循环中放入了一些调试代码,发现以下行占用了100ms的时间:

c = mSurfaceHolder.lockCanvas();

还有其他人看到过这种行为吗?我通过扩展View并实现onDraw()临时替换了Surfaceview,我得到了更好的帧率。

虽然总的来说,SurfaceView在我的HTC Desire上要快得多。我怀疑这可能是Android 2.1的问题。我正在考虑将手机 Root 并尽可能将其升级到2.2,但我确实希望设备在2.1上运行,因此从长远来看可能适得其反。

** 更新 **

我一直在做更多的工作,并且发现了一些令人费解的方面。

我将手机 Root 并安装了2.2,但问题仍然存在。首次启动该应用程序时,lockCanvas会按预期方式工作(0-1毫秒)。然后在初始化期间的某个时间点,lockCanvas突然开始耗时约100ms。

可能值得指出的是,我正在异步任务中加载 Assets ,以便显示加载屏幕。

尽管尽我最大的努力来确定缓慢发生时程序实际上正在执行的操作,但我却无法做到。实际上,当我在 Debug模式下单步运行它时,它的运行速度很快!

现在,我发现,如果在SurfaceView的构造函数中添加延迟(大约10秒),则不会发生缓慢现象,并且一切正常。

但是,如果按Home(主页),然后再切换回去,则速度会变慢。

对于这个愚蠢的不合逻辑的问题,我几乎束手无策了!我有决心将其归结为特定于设备的问题。

我觉得这可能与内存使用情况有关。也许某些东西被交换掉了,并且影响了视频ram?

我至少会对理论感兴趣。

最佳答案

关于docs中的lockCanvas():



对于某些设备,是否可能过早启动了绘制循环?我认为这是问题所在,因为您写道:

10-05 17:43