这似乎是一个基本的问题,但在搜索了一段时间并使用它之后,我已经到了可以欣赏一些帮助的地步.我想让一个SensorEventListener在一个与UI不同的线程中运行,这样当事件进入时需要进行的计算不会减慢UI的速度.
我最近的尝试看起来像:
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
}
}
Run Code Online (Sandbox Code Playgroud)
在活动(或服务)onCreate()中,我创建了一个SensorThread对象并调用其start()方法.正如您所料,调试日志显示新线程中的"RunTag"条目.但onSensorChanged()的"ListenerTag"正在主线程中运行,即使它的对象在新线程中实例化.我该如何改变?