這似乎是一個基本問題,但經過一段時間的尋找並使用它後,我已經到了希望得到一些幫助的地步。我想讓一個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