这是我的问题:我正在开发一种音乐游戏,用户可以从midi键盘输入到android(我使用的是这个库:https://github.com/kshoji/USB-MIDI-Driver)。对于我的主要游戏布局,我使用了一个与游戏循环相结合的表面视图。我优化了我的onDraw()非常快,但无论出于何种原因,使用外部midi键盘时的帧速率比在屏幕键盘上使用触摸要慢得多。
起初我虽然这是由于键盘驱动程序的开销,但后来我注意到当我触摸屏幕时,帧率不再是波动的,即使我正在使用midi键盘。有谁知道为什么会这样? android是否为响应触摸事件的ui更新做了某种背景优化?感谢。
编辑:我已经提供了有关我的问题的更多信息。基本上,我的设备正在做的是将CPU速度设置为低以节省电力。策略(由CPU调控器定义)是在用户触摸屏幕时为cpu提供增强,并在未检测到任何触摸时降低CPU时钟速度。我的问题是,由于我想通过外部设备进行交互,而不是通过触摸事件,因此cpu很慢,结果导致帧率不好。如果你有root权限,显然有办法覆盖这个...但我宁愿不诉诸:/。如果有人有任何黑客或想法,请告诉我。答案 0 :(得分:1)
正如您所指出的,问题是积极的节电代码。一些注释和一些链接位于this answer。
如果你的应用程序在CPU上做了很多工作,那么它就不会受到限制。因此,一个黑客/解决方法是拥有一个只是坐下并旋转的线程。这是一个非常糟糕的主意,因为它会对设备的电池寿命产生不利影响。
如果您唯一的问题是显示不稳定,而不是像从外部设备中删除数据那么严重,那么您可以通过在应用落后时丢帧来解决问题。引用链接的答案:
问题在于系统在没有检测到与用户的交互时正在积极地降低时钟速度以节省电力。 (高通特别喜欢这个。)解决方法是在必要时丢帧。请参阅this article游戏循环,以及Grafika's“记录GL app”活动(
doFrame()
)中演示的基于编舞的技巧。