我编写了一个应用程序来将传感器数据保存到文件中。目标是以100 Hz的速度保存IMU数据。 我使用Asynctask作为存储部分。一切似乎都很好;但是当我在文件中看到值时,会有很多次写入的数据。你有什么想法:
@Override
public final void onSensorChanged(SensorEvent event) {
//timestamp = (new Date()).getTime() + (event.timestamp - System.nanoTime()) / 1000000L;
timestamp = new Date().getTime();
// Handle accelerometer reading
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
bufferData[0] = event.values[0];
bufferData[1] = event.values[1];
bufferData[2] = event.values[2];
}
// Handle a gyro reading
else if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
bufferData[3] = event.values[0];
bufferData[4] = event.values[1];
bufferData[5] = event.values[2];
}
save_IMU save_imu = new save_IMU();
save_imu.execute();
}
答案 0 :(得分:0)
AsyncTask不是您的问题的好选择。
你asynctask从bufferData数组中读取共享数据,每当传感器值发生变化时,该数据就会被覆盖。在调用execute方法时,AsyncTask不会启动。它被放入队列,而不是等待执行自由线程。因此它可能需要相同的时间才能运行。写入存储可能比您需要的速度慢,因此队列将填满,并且可以在两个onSensorChanged调用之间运行更多任务。如你所见,他们可以写出多个相等的行。
我的建议:
答案 1 :(得分:0)
bufferData
应该是onSensorChanged()
函数的局部变量。
您应该使用new save_IMU(bufferData );
将缓冲区传输到asynctask。