2012-03-04 53 views
2

假設我試圖以高速從傳感器收集數據,並將其寫入文件。通過「開始」和「停止」按鈕從UI控制集合。寫這樣的班級是否有意義:是否可以使用AsyncTask收集傳感器數據?

protected class DataLogger extends AsyncTask<Void, Void, Void> implements SensorEventListener 

我應該直接使用線程嗎?根據經驗,我發現使用這樣的AsyncTask可以鎖定我的用戶界面,但我無法完全理解爲什麼。

回答

1

對我來說這似乎不是一個好主意,因爲AsyncTask對象通常具有有限的使用期限。他們完成他們的任務,然後他們離開。當這種情況發生時誰會聽你的傳感器?一個Service似乎是你想要做的更好的選擇。

1

BlackRider似乎很正確。事實證明,收集傳感器數據的好方法如下:

Sensor Manager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
mHandlerThread = new HandlerThread("sensorThread"); 
mHandlerThread.start(); 
handler = new Handler(mHandlerThread.getLooper()); 
mSensorManager.registerListener(this, 
       mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
       SensorManager.SENSOR_DELAY_FASTEST, handler); 
相關問題