假設我試圖以高速從傳感器收集數據,並將其寫入文件。通過「開始」和「停止」按鈕從UI控制集合。寫這樣的班級是否有意義:是否可以使用AsyncTask收集傳感器數據?
protected class DataLogger extends AsyncTask<Void, Void, Void> implements SensorEventListener
我應該直接使用線程嗎?根據經驗,我發現使用這樣的AsyncTask
可以鎖定我的用戶界面,但我無法完全理解爲什麼。
假設我試圖以高速從傳感器收集數據,並將其寫入文件。通過「開始」和「停止」按鈕從UI控制集合。寫這樣的班級是否有意義:是否可以使用AsyncTask收集傳感器數據?
protected class DataLogger extends AsyncTask<Void, Void, Void> implements SensorEventListener
我應該直接使用線程嗎?根據經驗,我發現使用這樣的AsyncTask
可以鎖定我的用戶界面,但我無法完全理解爲什麼。
對我來說這似乎不是一個好主意,因爲AsyncTask
對象通常具有有限的使用期限。他們完成他們的任務,然後他們離開。當這種情況發生時誰會聽你的傳感器?一個Service
似乎是你想要做的更好的選擇。
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);