【发布时间】:2016-11-13 19:06:47
【问题描述】:
我使用 NativeActivity 编写了一个 OpenGL ES 2 应用程序,它呈现大约 6 个带纹理的三角形,您可以使用触摸输入拖动它们。该应用程序正在尽可能快地渲染,在渲染之前调用glClear(),在渲染之后调用eglSwapBuffers()。正如预期的那样,帧速率被限制在 60 fps 左右的显示频率,并且场景流畅地移动。但是,经过一段时间(10 到 60 秒)后,即使帧速率仍为 60 fps,运动也开始出现断断续续的现象。我使用的设备是一加3。
起初我怀疑罪魁祸首是省电模式,但调查显示 CPU 频率与卡顿之间没有相关性。
我确实注意到了一些有趣的事情,当queueBuffer() 执行时间增加时,口吃就开始了。
这是 systrace 之前的口吃: 这是 systrace after 口吃: 这是从之前到之后的转换过程中的 systrace:
如何阻止应用卡顿?
【问题讨论】:
-
在没有看到任何代码的情况下很难提供帮助...可能是垃圾收集问题?您是否在每一帧中创建了许多对象?
-
完全没有,我用的是NativeActivity,目前根本不用Java对象。