在较慢的设备(Orange San Francisco aka ZTE Blade)上测试我的游戏,我得到了一个令人震惊的帧速率。
我将一些调试代码放入绘图循环中,发现以下行占用了 100 毫秒以上:
c = mSurfaceHolder.lockCanvas();
其他人看到这种行为吗?我通过扩展 View 和实现 onDraw() 临时替换了surfaceview,我得到了更好的帧率。
虽然总的来说,我的 HTC Desire 上的 surfaceView 速度要快得多。我怀疑这可能是 Android 2.1 的问题。如果可能的话,我正在考虑将手机植根并将其升级到 2.2,但我确实希望设备在 2.1 上运行,这样从长远来看可能会适得其反。
** 更新 **
我一直在研究这个问题,并且发现了一些更令人费解的方面。
我将手机植根并安装了2.2,但问题仍然存在。首次启动应用程序时,lockCanvas 按预期工作(0-1 毫秒)。然后在我初始化过程中的某个时刻,lockCanvas 突然开始花费大约 100 毫秒。
值得指出的是,我正在将资产加载到异步任务中,以便显示加载屏幕。
尽管我尽最大努力确定程序在缓慢发生时实际在做什么,但我无法做到。事实上,当我以调试模式和单步运行它时,它运行得很快!
现在我发现,如果我在 SurfaceView 的构造函数中添加延迟(大约 10 秒),则不会出现缓慢并且一切正常。
但是,如果您按 Home,然后再切换回来,那么缓慢又回来了。
在这个愚蠢的不合逻辑的问题上,我几乎束手无策!我想把它归结为设备特定的问题。
我觉得这可能与内存使用有关。也许有些东西被换掉了,它会影响视频内存?
我至少会对理论感兴趣。