2011-05-20 16 views

Respuesta

9

Si usa un SensorEventListener, ¿cuál es el propósito del controlador?

Si tuviera que adivinar, es para que pueda obtener los eventos del sensor entregados en una secuencia de fondo (por ejemplo, un HandlerThread). De forma predeterminada, los eventos del sensor se entregan en la secuencia principal de la aplicación, lo cual está bien en algunos casos.

+0

se puede declarar varios sensores aquí? – Chaine

+0

¿Puedo usar multiples args de SENSOR? – Chaine

19

Aquí tienes un ejemplo:

SensorManager mSensorMgr = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); 

HandlerThread mHandlerThread = new HandlerThread("sensorThread"); 

mHandlerThread.start(); 

Handler handler = new Handler(mHandlerThread.getLooper()); 

mSensorMgr.registerListener(this, mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
        SensorManager.SENSOR_DELAY_FASTEST, handler); 

A partir del código fuente de la clase androide de SensorManager se puede ver que el registerListener() extraer el looper de su Gestor de crear un nuevo controlador con este looper donde llamar el método onSensorChanged.

Si no pasa su manejador, el SensorManager utilizará la secuencia principal de la aplicación.

+3

Gracias por esta respuesta, clara y concisa. En mi humilde opinión esto debería agregarse a los documentos oficiales :) – ack

0

1) Si utiliza un SensorEventListener, ¿cuál es el propósito del controlador? si lo ejecuta en el hilo principal, y está haciendo algunos cálculos pesados, ralentizará la interfaz de usuario principal para que no responda. Siempre escriba sus tareas largas en un hilo separado, para evitar ANR.

Aquí es un ejemplo http://stacktips.com/tutorials/android/android-service-example

Cuestiones relacionadas