我正在使用加速度计作为用户输入来开发适用于Android(2.1+)的游戏。我使用在 Activity 开始时向传感器管理器注册的传感器监听器,如下所示:

mSensorManager.registerListener(SystemRegistry.inputSystem.mSensorListener,
                                accSensor, SensorManager.SENSOR_DELAY_UI);

效果很好,我只读取了onSensorChanged(SensorEvent event)中的加速度计值即可在游戏循环中使用它:
public void onSensorChanged(SensorEvent event){
     accX = event.values[0];
     accY = event.values[1];
     accY = event.values[2];
 }

我正在编写一个实时游戏,所以我试图避免在代码中分配任何内存,因为我想最大程度地减少垃圾收集。问题在于,每次有一个SensorEvent时,传感器管理器实际上都会分配内存。例如,这是ddms分配跟踪器的输出:
51  28  android.hardware.SensorEvent    9   android.hardware.SensorManager$ListenerDelegate createSensorEvent
50  28  float[] 9   android.hardware.SensorEvent    <init>

显示每个事件分配28 * 2 = 56字节。这似乎具有经常触发垃圾收集器的效果,这会导致一些滞后...所以这是我的问题:有没有办法实现同一件事(获取当前的加速度矢量),而又不分配任何内存?有没有一种方法可以真正按需读取此向量的值而无需等待事件?

最佳答案

听起来我们需要解决一些问题,我将在内部提交一个错误。

09-15 17:09