假设我试图以高速率从传感器收集数据,并将其写入文件。通过“开始”和“停止”按钮从UI控制集合。写这样的课是否有意义:
protected class DataLogger extends AsyncTask<Void, Void, Void> implements SensorEventListener
我应该直接使用线程吗?根据经验,我发现使用这样的AsyncTask
会锁定我的UI,但我无法完全理解为什么。
答案 0 :(得分:1)
对我来说这似乎不是一个好主意,因为AsyncTask
对象通常具有有限的寿命。他们完成任务然后就会消失。当发生这种情况时,谁会听你的传感器? Service
似乎是您正在尝试做的更好的选择。
答案 1 :(得分: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);