2011-10-09 7 views
1

Je développe une application qui nécessite l'accès aux «5 dernières secondes de données» pour un capteur donné. Mon plan est de stocker ces données en quelque sorte, puis quand je demande les données, il retournera toutes les données obtenues dans les 5 dernières secondes. Je ne sais pas comment le faire efficacement, étant donné que:Collecte, stockage et récupération de données de capteur

  1. Dalvik n'aime pas avoir beaucoup d'objets en cours de création, donc je ne peux pas faire un objet pour chaque lecture du capteur qui contient la valeur + horodatage

  2. Je dois constamment stocker de nouvelles données dans une sorte de structure, tout en en récupérant une partie spécifique.

Ma seule autre exigence est que les données de plus de 5 secondes doivent être éliminées. Ce n'est pas vraiment critique, mais j'imagine que conserver les données mange à la mémoire.

J'ai actuellement un écouteur onSensorChanged mis en place, donc je n'ai pas besoin d'aide pour ça.

Des idées?

+0

Je suppose que vous travaillez avec [SensorManager] (http://developer.android.com/reference/android/hardware/SensorManager.html), pourquoi ne pas interroger avec un [Timer] (http://developer.android.com/reference/java/util/Timer.html) chaque seconde, en stockant ces valeurs où bon vous semble, puis en interrogeant simplement ce référentiel en cas de besoin? –

+0

jetez un oeil à SensorEventListener (http://developer.android.com/reference/android/hardware/SensorEventListener.html) donc quand vous obtenez de nouvelles données jusqu'à ce qu'elles changent. Je conseillerais d'enregistrer cette information localement sur un db et un accès via Cursor en utilisant LoaderManager – Necronet

+0

@NanoTaboada Voilà le problème, quel référentiel utiliser, et comment l'interroger? – Glitch

Répondre

1

peut-être pré-allouer suffisamment d'objets pour stocker 5 secondes de données et les stocker dans un pool. récupérer les objets du pool, ajouter l'horodatage et la valeur et les insérer dans un ensemble trié. supprimez tous les anciens objets après en avoir inséré un et remettez-les dans la piscine. ou peut-être vous pouvez vous en tirer avec juste un tampon circulaire http://en.wikipedia.org/wiki/Circular_buffer

+0

Un problème que je peux voir faire est que je n'ai aucune idée du nombre d'objets dont j'ai besoin. Je suppose que je pourrais limiter le pollen du capteur, mais il n'y a aucun moyen pour moi de savoir ce que signifie réellement 'SENSOR_DELAY_FASTEST', donc la limite supérieure est indéterminée. Je suppose que je pourrais juste "écraser" des objets pendant qu'ils se remplissent, mais je préfère éviter cela s'il y a une manière propre de le faire. – Glitch

+0

faire des tests ou faire des calculs et avoir une idée de combien vous pourriez avoir besoin. peut-être allouer plus si nécessaire. –

+0

Ok, ça devrait marcher. Y a-t-il une classe que je devrais examiner pour mettre en place un 'pool'? – Glitch

Questions connexes