Это похоже на основной вопрос, но после того, как вы некоторое время искали и играли с ним, я пришел к тому, что можно было бы оценить некоторую помощь. Я хотел бы, чтобы SensorEventListener запускался в отдельном потоке из пользовательского интерфейса, так что вычисления, которые должны возникать при поступлении событий, не замедляют работу пользовательского интерфейса.
Моя последняя попытка выглядит так:
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
}
}
В действии (или службе) onCreate() я создаю объект SensorThread и вызываю его метод start(). Как и следовало ожидать, в журнале отладки отображается запись "RunTag" в новом потоке. Но onSensorChanged() "ListenerTag" запущен в основном потоке, хотя его объект создается в новом потоке. Как мне это изменить?