2011-01-20 14 views
6

Estoy tratando de encontrar la mejor manera de controlar el sensor del acelerómetro con una tasa de sondeo de menos de .25 milisegundos. Implementé una opción de UI para que el usuario cambie a un estado de monitoreo constante y deje en claro las ramificaciones de drenaje de la batería. ¿Sería un servicio remoto la mejor manera sobre un hilo de daemon debido a la forma en que Android maneja la limpieza de la memoria y los hilos? El objetivo es hacer que el acelerómetro se monitoree tan cerca como sea posible, el consumo de la batería sea condenado. Y este monitoreo necesita ser de larga duración, tal vez incluso más de 24 horas seguidas, de nuevo me doy cuenta de las consecuencias del consumo de energía. Cualquier lectura sugerida o fragmento de código será apreciada.Monitorear constantemente un sensor en Android

Simplemente un nuevo usuario que busca consejos de la sabiduría de la comunidad de Android. Gracias de antemano,

-Steve

ACLARACION: Estoy tratando de detectar el instante en que haya un cambio en la aceleración. Mi código discrimina por eje, pero el objetivo es obtener datos en tiempo real del acelerómetro.

+0

la aceleración en android es un sensor por cierto. Empuja, ¡no puedes extraer sensiblemente valores de eso! – LordT

+0

@LordT - En una relectura me doy cuenta de que podría haber redactado mejor. Estoy usando una interfaz de escucha personalizada para recibir las actualizaciones del sensor de aceleración. Gracias por señalar eso. – Kingsolmn

+0

oh, está bien, eso tiene más sentido. Como dije, me gustaría ir con un Servicio para esto - usar un servicio Remoto te permitirá correr en segundo plano savely – LordT

Respuesta

2

Lo hicimos usando Android Services - se pueden iniciar desde una actividad pero siguen ejecutándose en segundo plano. ¡Eso es probablemente lo que estás buscando!
Algunos Cómos:

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

Aunque el afiche no está interesado en la descarga de la batería, pero tengo curiosidad, ¿qué tan malo fue? – Demiurg

+0

No recuerdo los números exactos, pero para nuestra configuración completa, obtuve alrededor de 10 horas de un G1 (en esos días :)) - Sin embargo, eso fue la frecuencia cardíaca y otros números crujiendo a> 300 Hz y la transmisión a través de Bluetooth . Creo que tenemos más de 16 horas de solo usar el acelerómetro – LordT

+0

¿Qué pasa con la hibernación del dispositivo? Una vez que el dispositivo se apaga y cierra esos sensores, no recibirá ninguna actualización del sensor. ¿Corriste con wake lock todo el tiempo? – MikeL

1

Usar un hilo específico para monitorear y esperar es la mejor solución que le da flexibilidad en el período de espera. Esto es bastante eficiente ya que no requiere ningún servicio específico.

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) { 
      } 
     } 
    } 
} 

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

Se especifica un retardo muy corto (.250 ms) por lo que esta será la CPU. Probablemente pueda usar el resultado del acelerómetro para aumentar o reducir este retraso. Por ejemplo, si detecta que no hay aceleración, aumente la demora (hasta , pero 100ms parece razonable o incluso mayor). Tan pronto como detecte algo, reduzca la demora. Todo esto depende de tu aplicación.

+0

En android, realmente usaría un controlador para esto, ¡si realmente lo necesitara! – LordT

+0

@ ciceron- Estoy tratando de detectar el momento en que hay un cambio en la aceleración. Mi código discrimina por eje, pero el objetivo es obtener datos en tiempo real del acelerómetro. Gracias por la sugerencia sobre el uso de los datos de aceleración para controlar el intervalo de sueño, ¡buena idea! – Kingsolmn

Cuestiones relacionadas