我开发了一个数据收集器,它可以从Accelerometer,Gyroscope,Magnetometer收集数据,并且它可以正常工作一段时间。然后我也添加了线性加速(4个月后,本周)。现在这两个版本都表现得非常奇怪。有时候,当我做一些像走路等物理活动时,他们会完美地记录数据。但是,有时候它不会更新传感器值,只是重复旧值,即每个传感器值都会在5秒,2秒等后随机更新,我需要一个采样率为每秒50个样本。我试验了10-15名参与者,因此我的所有数据都无效。奇怪的是,同一个应用程序以前完美运行。我找不到任何问题。我在这里放置了一些快照。可能是有人可以指出任何错误或什么?
缓冲的Writer:
FileWriter fow;
BufferedWriter bow;
extfile = new File(extfilepath, message + ".csv");
fow = new FileWriter(extfile);
bow = new BufferedWriter(fow);
然后,这个bow.writer被用于timertask线程,每20毫秒记录一次数据。
任何人都可以对此发表评论或帮助吗?这个应用程序的奇怪行为超出了我的理解。
答案 0 :(得分:2)
如果您的应用程序转到后台,请检查是否已获取唤醒锁定。我在数据收集应用程序中成功使用了PowerManager.PARTIAL_WAKE_LOCK。
当您的显示屏关闭时,您的应用程序至少会暂停(系统甚至可能会停止它)。部分唤醒锁定“确保CPU正在运行;屏幕和键盘背光将被允许关闭。”因此,在线之间读取意味着您的CPU可能会在很短的时间内进入休眠状态以节省电量。
答案 1 :(得分:0)
你忘了粘贴: else if(event.sensor.getType()== Sensor.TYPE_LINEAR_ACCELERATION){}? 你在使用加速度计数据,然后减去重力吗?
行。你的代码调用计时器是什么样的?像这样的东西?
Timer updateTimer = new Timer("linear accel");
updateTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
updateGUI();
}
}, 0, 100);
}
private void updateGUI() {
runOnUiThread(new Runnable() {
public void run() {} } ?