2012-02-12 15 views
7

Desidero scrivere un'applicazione che legge quanti più sensori possibile (per volta) da sensori diversi (GPS, Acc, Gyro, Compass). Quindi devo indagare se c'è un vantaggio nell'utilizzo di NDK.Android: Migliora la frequenza di campionamento del sensore utilizzando NDK e polling

Ecco le mie domande:

a) Qual è il collo di bottiglia quando si leggono i valori dei sensori da un sensore? È lo stesso senosr o Java? Posso aumentare il tasso usando NDK? (Penso che per il GPS il collo di bottiglia sia il sensore stesso, ma ho letto che, ad esempio, il Gyro-Sensor è abbastanza veloce) Ho trovato this thread e sembra che il collo di bottiglia sia il sensore. Qualcuno può confermarlo?

b) Se il polling invece di utilizzare EventListener aumentare il tasso? Qual è il modo migliore per leggere velocemente i valori dei sensori?

c) ha l'uso della NDK alcuna influenza sul consumo di energia della domanda? Non ho trovato nulla a riguardo.

d) Sono nuovo di Android. È molto più conveniente usare NDK invece del normale Java? Secondo questo sample-code sembra essere semplice interagire con i sensori usando una coda di eventi, ma quanto ci si può permettere di compilare il codice e usarlo dall'applicazione?

Grazie in anticipo.

risposta

0

Quando si registra l'ascoltatore del sensore è necessario passare SensorManager.SENSOR_DELAY_FASTEST a registerListener().

Vedere http://developer.android.com/reference/android/hardware/SensorManager.html per ulteriori dettagli.

+0

Grazie per la risposta, ma non è quello che stavo chiedendo. La domanda era se c'è un vantaggio nell'uso di C++ (NDK) invece di Java (SDK). – steckl

+0

Stiamo utilizzando JNI per passare i dati del sensore G da Java a nativo e non abbiamo riscontrato alcun problema. –

+0

Ottieni qualche beneficio dal tuo metodo? Perché non usi direttamente l'interfaccia sensore di NDK? Per me il tuo metodo non ha alcun vantaggio, dal momento che non eseguo alcun calcolo con i dati del sensore, lo inoltro semplicemente a un server. – steckl

0

Per esperienza, posso almeno rispondere alla prima delle vostre domande:

a) Utilizzo di base di Java è abbastanza veloce per la gestione di più sensori. In una delle mie applicazioni, ho letto Accelerometro, Giroscopio, Magnetometro, Rotazione del gioco vettoriale e Magnetometro non calibrato tutto in una volta con SENSOR_DELAY_FASTEST.

Oltre a questo ho anche fatto un po 'di filtraggio e archiviazione dei dati, oltre a qualche matematica di quaternioni per tenere traccia della rotazione. Guardando i dati grezzi (che ho anche salvato in un file .txt), non sembravano esserci dati mancanti o ritardi (la differenza media tra i timestamp era la stessa di un sensore singolo senza calcoli).

Quindi, nel mio caso, i sensori funzionavano il più velocemente possibile e Java manteneva bene.

...

Detto questo, se si sta facendo grandi quantità di calcoli, utilizzando NDK potrebbe essere la pena di provare.

Problemi correlati