2012-02-12 7 views
7

Quiero escribir una aplicación que lea tantos saltos de sensores (por tiempo) como sea posible desde diferentes sensores (GPS, Acc, Gyro, Compass). Así que tengo que investigar si hay una ventaja en el uso de NDK.Android: Mejore la tasa de muestreo del sensor mediante NDK y sondeo

Aquí están mis preguntas:

a) ¿Cuál es el cuello de botella cuando lee los valores del sensor de un sensor? ¿Es el propio senosr o Java? ¿Puedo aumentar la velocidad usando NDK? (Creo que para el GPS el cuello de botella es el sensor en sí, pero he leído que, por ejemplo, el Gyro-Sensor es bastante rápido) Encontré this thread y parece que el cuello de botella es el sensor. Puede alguien confirmar esto?

b) ¿El sondeo en lugar de utilizar EventListener aumenta la velocidad? ¿Cuál es la mejor manera de leer los valores de los sensores rápidamente?

c) ¿Tiene el uso de NDK alguna influencia sobre el consumo de energía de la aplicación? No encontré nada sobre esto.

d) Soy nuevo en Android. ¿Es mucho más económico usar NDK en lugar de Java normal? Según este sample-code, parece sencillo interactuar con los sensores utilizando una cola de eventos, pero ¿cuánto puede permitirse compilar el código y usarlo desde la aplicación?

Gracias de antemano.

Respuesta

0

Cuando registra su sensor de escucha, necesita pasar SensorManager.SENSOR_DELAY_FASTEST a registerListener().

Consulte http://developer.android.com/reference/android/hardware/SensorManager.html para obtener más información.

+0

Gracias por su respuesta, pero eso no es lo que estaba pidiendo. La pregunta era si hay un beneficio en el uso de C++ (NDK) en lugar de Java (SDK). – steckl

+0

Estamos usando JNI para pasar los datos del sensor G de Java a nativo y no encontramos problemas con eso. –

+0

¿Obtiene algún beneficio de su método? ¿Por qué no usas la interfaz del sensor de NDK directamente? Para mí, su método no tiene ningún beneficio, ya que no hago ningún cálculo con los datos del sensor, simplemente lo reenvío a un servidor. – steckl

0

Por experiencia, al menos puedo responder a la primera de sus preguntas:

a) Usando la base de Java es lo suficientemente rápido para manejar múltiples sensores. En una de mis aplicaciones, leí Acelerómetro, Giroscopio, Magnetómetro, Vector de rotación del juego y Magnetómetro sin calibrar, todo de una vez con SENSOR_DELAY_FASTEST.

Además de esto, también hice un montón de filtrado y almacenamiento de datos, así como algunas matemáticas de cuaternión para realizar un seguimiento de la rotación. Al observar los datos brutos (que también guardé en un archivo .txt), no parecía haber datos faltantes o demoras (la diferencia promedio entre las marcas de tiempo era la misma que la de un solo sensor sin cálculos).

En mi caso, los sensores funcionaban tan rápido como podían y Java se mantenía bien.

...

Dicho esto, si estás haciendo muy grandes cantidades de cálculos, utilizando NDK podría ser vale la pena probar.