【发布时间】:2015-08-29 19:56:00
【问题描述】:
这是我的问题:我正在开发一种音乐游戏,用户可以在其中从 midi 键盘输入到 android(我正在使用这个库:https://github.com/kshoji/USB-MIDI-Driver)。对于我的主要游戏布局,我使用表面视图和游戏循环。我将 onDraw() 优化得非常快,但无论出于何种原因,使用外部 MIDI 键盘时的帧速率要比使用屏幕键盘触摸时慢得多。
起初我认为这是由于键盘驱动程序的开销造成的,但后来我注意到当我触摸屏幕时,帧率不再不稳定,即使我在使用 MIDI 键盘时也是如此。有谁知道为什么会这样? android 是否对响应触摸事件的 ui 更新进行某种背景优化?谢谢。
编辑:我已经列出了有关我的问题的更多信息。基本上,我的设备正在做的是将 CPU 速度设置为低以节省电量。该策略(由 CPU 调控器定义)是在用户触摸屏幕时提高 cpu 的速度,并在未检测到任何触摸时降低 cpu 时钟速度。我的问题是,由于我想通过外部设备进行交互,而不是通过触摸事件进行交互,所以 CPU 速度很慢,因此我的帧率很差。如果您具有 root 访问权限,显然有一些方法可以覆盖它......但我宁愿不诉诸于此:/。如果有人有任何技巧或想法,请告诉我。
【问题讨论】:
-
您是否从您的
onMidiNoteOn处理程序调用postInvalidate()以获得您的主视图? -
不,但我正在使用游戏循环来重绘活动,所以我认为不需要?
-
如果以后有人光顾这里,我找到了有关 cpu 调控器策略和输入提升的源代码:android.googlesource.com/kernel/msm/+/…。不是特别有用,但我认为看看并确切了解引擎盖下发生的事情很有趣!文件 cpu-boost.c 包含由操作系统执行的“输入提升”的代码。
-
“dory”分支可能不是最好的例子,因为它适用于可穿戴设备,这些设备比手持设备对电源更加偏执。
标签: android optimization surfaceview midi frame-rate