Cela semble être une question de base, mais après avoir cherché pendant un moment et joué avec, je suis arrivé au point où de l'aide serait appréciée. Je souhaite que SensorEventListener soit exécuté dans un thread distinct de l'interface utilisateur, de sorte que les calculs qui doivent avoir lieu lorsque les événements arrivent ne ralentissent pas l'interface utilisateur.SensorEventListener dans thread séparé
Ma dernière tentative ressemble:
class SensorThread extends Thread {
SensorManager mSensorManager;
Sensor mSensor;
public void run() {
Log.d("RunTag", Thread.currentThread().getName()); // To display thread
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE );
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
MySensorListener msl = new MySensorListener();
mSensorManager.registerListener(msl, mSensor, SensorManager.SENSOR_DELAY_UI);
}
private class MySensorListener implements SensorEventListener {
public void onAccuracyChanged (Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent sensorEvent) {
Log.d("ListenerTag", Thread.currentThread().getName()); // To display thread
}
}
Dans de l'activité (ou de services) onCreate(), je crée un objet SensorThread et appeler sa méthode start(). Comme vous vous en doutez, le journal de débogage affiche l'entrée "RunTag" dans le nouveau thread. Mais "ListenerTag" de onSensorChanged() s'exécute dans le thread principal, même si son objet est instancié dans le nouveau thread. Comment puis-je changer cela?
duplication possible de [Capteur d'acléromètre dans un fil séparé] (http://stackoverflow.com/questions/17513352/acclerometer-sensor-in-separate-thread) –