这似乎是一个基本问题,但经过一段时间的寻找并使用它后,我已经到了希望得到一些帮助的地步。我想让一个SensorEventListener在用户界面的一个单独线程中运行,以便事件进入时需要发生的计算不会减慢用户界面的速度。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”正在主线程中运行,即使它的对象在新线程中实例化了。我该如何改变它?
[单独线程中的Acclerometer传感器]的可能重复(http://stackoverflow.com/questions/17513352/acclerometer-sensor-in-separate-thread) – 2013-10-03 09:52:50