gpt4 book ai didi

android - lockCanvas() 真的很慢

转载 作者:可可西里 更新时间:2023-11-01 19:06:21 27 4
gpt4 key购买 nike

在速度较慢的设备(Orange San Francisco 又名 ZTE Blade)上测试我的游戏时,我得到了一个令人震惊的帧速率。

我将一些调试代码放入绘图循环中,发现以下行占用了超过 100 毫秒:

c = mSurfaceHolder.lockCanvas();

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

尽管一般来说,surfaceView 在我的 HTC Desire 上要快得多。我怀疑这可能是 Android 2.1 的问题。我正在考虑对手机进行 root 并在可能的情况下将其升级到 2.2,但我确实想要一台运行 2.1 的设备,这样从长远来看可能会适得其反。

** 更新**

我一直在研究这个问题,并且发现了一些更令人费解的方面。

我root了手机,安装了2.2,问题依旧。当应用程序首次启动时,lockCanvas 按预期工作(0-1 毫秒)。然后在我初始化期间的某个时刻,lockCanvas 突然开始占用大约 100 毫秒。

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

尽管我尽了最大努力来确定程序在运行缓慢时实际在做什么,但我还是没能做到。事实上,当我在 Debug模式下单步运行它时,它运行得很快!

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

但是,如果您按 Home,然后切换回去,速度又会变慢。

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

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

至少我会对理论感兴趣。

最佳答案

关于文档中的 lockCanvas():

If you call this repeatedly when the Surface is not ready (before Callback.surfaceCreated or after Callback.surfaceDestroyed), your calls will be throttled to a slow rate in order to avoid consuming CPU.

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

Now I discovered that if I add a delay in the constructor of my SurfaceView (of about 10 seconds), the slowness doesn't occur and all works fine.

关于android - lockCanvas() 真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5098728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com