在Android上出现迟钝的反应迟钝

时间:2012-09-05 13:47:42

标签: android

我正在移植我的游戏,从iOS到Android。大多数情况下,它的工作正常。我主要使用C / C ++代码,NDK / JNI和一些Java来管理应用程序生命周期,并向我的游戏发送触摸和加速计信息。

据我所知,有2个线程,主UI线程,以及由GLSurfaceView创建的线程来处理显示和翻转OpenGL后缓冲区等。

所以,除了接触之外,一切都运作良好。与我在设备上尝试的其他应用程序相比,它们感觉迟钝且反应迟钝。在做了一些研究后,我认为这个问题可能与我如何使用线程有关。具体来说,我认为,它可能与它在工作之后没有睡眠显示线程有关,因此,它在主UI线程上保持不变。听起来有道理吗?

我尝试计算我需要GLSurfaceView显示线程休眠多少毫秒,然后睡眠(),它改善了触摸,但动画在我的设备上不再是恒定的60FPS。我怀疑是我计算前一帧睡眠的ms数,并使用该数字为当前帧休眠。

或者,它可能是完全不同的东西?我不知道。我还是Android新手......

希望有人可以对此事有所了解,或指出我正确的方向。

谢谢,

1 个答案:

答案 0 :(得分:0)

您不必睡眠GL线程。事实上,我认为睡觉GL线程会使它更加缓慢,因为这是在屏幕上渲染图像的事情。

缓慢的用户界面主要是由主要UI线程被阻止引起的。如果你在主线程(例如加速度计数据)上进行大量处理,主线程将首先执行工作,然后处理用户输入。这可以给人一种迟钝的“感觉”。所有触摸事件和非opengl绘图事件必须在UI线程中发生。其他任何事情都可能发生在后台线程中,该线程不会长时间阻塞UI线程。

除此之外,另一种可能性是你只是让处理器过载。您的GL线程可能需要很长时间才能绘制。它可能接收和处理触摸事件和加速度计数据。但是,如果渲染需要很长时间,那么你会看到过时的数据。因此,它再次感到“迟钝”。你提到它不是一个恒定的60 FPS所以这是一个非常现实的可能性。您可能已经优化了绘图代码,因此渲染速度更快。