2011-01-20 5 views
6

Sto cercando di capire il modo migliore per monitorare il sensore dell'accelerometro con una velocità di polling inferiore a 0,25 millisecondi. Ho implementato un'opzione UI per l'utente per passare a uno stato di monitoraggio costante e reso chiaro delle ramificazioni dello scarico della batteria. Un servizio remoto sarebbe il modo migliore su un thread daemon a causa del modo in cui Android gestisce la pulizia della memoria e dei thread? Il punto è quello di rendere l'accelerometro monitorato il più vicino possibile al costante, scaricando la batteria. E questo monitoraggio deve essere di lunga durata, forse anche più di 24 ore consecutive, di nuovo mi rendo conto delle conseguenze del consumo di energia. Ogni lettura suggerita o frammenti di codice saranno apprezzati.Monitorare costantemente un sensore su Android

Solo un neo alla ricerca di consigli dalla saggezza della comunità Android. Grazie in anticipo,

-Steve

PRECISAZIONE: sto cercando di rilevare l'istante c'è un cambiamento in accelerazione. Il mio codice discrimina per asse, ma ottenere i dati in tempo reale dall'accelerometro è il mio obiettivo.

+0

l'accelerazione su Android è un sensore btw. Spinge, non puoi sensibilmente tirare via i valori da esso! – LordT

+0

@LordT - In una rilettura mi rendo conto che avrei potuto esprimermi meglio. Sto usando un'interfaccia Listener personalizzata per ricevere gli aggiornamenti dal sensore accel. Grazie per la segnalazione. – Kingsolmn

+0

oh, okay, questo ha più senso. Come detto, andrei con un servizio per questo - l'uso di un servizio remoto ti consentirà di correre in background in modo sicuro – LordT

risposta

2

Abbiamo fatto questo utilizzando Android Services - possono essere avviati da un'attività ma rimangono in esecuzione in background. Questo è probabilmente quello che stai cercando!
Alcuni HOWTO:

  1. http://developerlife.com/tutorials/?p=356
  2. http://developer.android.com/guide/topics/fundamentals.html#procthread
+0

Anche se il poster non è interessato allo scarico della batteria, ma sono un po 'curioso - quanto è stato male? – Demiurg

+0

Non ricordo i numeri esatti, ma per la nostra configurazione completa, abbiamo ottenuto circa 10 ore di un G1 (tornando in quei giorni :)) - Tuttavia, quello era il heartrate crunch e altri numeri a> 300Hz e la trasmissione via bluetooth . Penso che abbiamo ottenuto più di 16 ore dall'utilizzo dell'accelerometro – LordT

+0

Che dire del letargo del dispositivo? Una volta che il dispositivo va in stop e chiude quei sensori, non riceverai aggiornamenti del sensore. Hai eseguito con la sveglia tutto il tempo? – MikeL

1

L'utilizzo di un thread specifico per il monitoraggio e l'attesa è la soluzione migliore che offre flessibilità nel periodo di attesa. Questo è abbastanza efficiente in quanto non richiede alcun servizio specifico.

class MonitorThread extends Thread { 
    ... 
    public void run() { 
     for (;;) { 
      long ms = 0; 
      int nanos = 250000; 
      ... // Do something or compute next delay to wait 
      try { 
       Thread.sleep(ms, nanos); 
      } catch (InterruptedException ex) { 
      } 
     } 
    } 
} 

Vedi http://developer.android.com/reference/java/lang/Thread.html

Si specifica un ritardo molto breve (.250 ms) quindi questo sarà per la CPU. Probabilmente è possibile utilizzare il risultato dell'accelerometro per aumentare o ridurre questo ritardo. Ad esempio, se si rileva che non vi è alcuna accelerazione, aumentare il ritardo (è su ma 100ms sembra ragionevole o addirittura superiore). Non appena si rileva qualcosa, ridurre il ritardo. Tutto questo dipende dalla tua applicazione.

+0

Su Android, vorrei davvero usare un gestore per questo, se proprio ne avessi bisogno! – LordT

+0

@ ciceron- Sto provando a rilevare l'istante in cui c'è un cambiamento nell'accelerazione. Il mio codice discrimina per asse, ma ottenere i dati in tempo reale dall'accelerometro è l'obiettivo. Grazie per il suggerimento sull'utilizzo dei dati di accelerazione per controllare l'intervallo di sonno, buona idea! – Kingsolmn