Android: чтение акселерометра без выделения памяти?

Я разрабатываю игру для Android (2.1+), используя акселерометр в качестве пользовательского ввода. Я использую прослушиватель датчиков, который регистрирую в начале активности с помощью диспетчера датчиков, а именно:

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

Это работает хорошо, и я просто прочитал значения акселерометра в onSensorChanged (событие SensorEvent) , чтобы использовать его в моем игровом цикле:

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 байтов, выделенных для каждого события. Похоже, это приводит к частому запуску сборщика мусора, что вызывает некоторые задержки ... Итак, вот мой вопрос: есть ли способ добиться того же (получить текущий вектор ускорения) без выделения памяти? Есть ли способ по запросу считывать значения этого вектора, не дожидаясь события?

6
задан Greystache 12 February 2011 в 16:49
поделиться