1

我开发了一个数据收集器,它从加速度计、陀螺仪、磁力计收集数据,它工作了一段时间。然后我也添加了线性加速度(4个月后,本周)。现在两个版本的行为都非常奇怪。有时,当我进行一些体育活动(例如步行等)时,它们会完美地记录数据。但是,有时它不会更新传感器值而只是重复旧值,即每个传感器值都会在 5 秒、2 秒等随机后更新,我需要一个每秒 50 个样本的采样率。我对 10-15 名参与者进行了实验,因此我的所有数据都无效。奇怪的是,同一个应用程序以前可以完美运行。我找不到任何问题。我在这里放了一些快照。可能是如果有人可以指出任何错误或什么?

缓冲写入器:

FileWriter fow;
    BufferedWriter bow;

extfile = new File(extfilepath, message + ".csv");
                    fow = new FileWriter(extfile);
                    bow = new BufferedWriter(fow);  

然后在 timertask 线程中使用这个 bow.writer 每 20 毫秒记录一次数据。

任何人都可以评论或帮助我吗?这个应用程序的这种奇怪行为超出了我的理解。

4

2 回答 2

2

如果您的应用程序进入后台,请检查您是否获得了唤醒锁。我在数据收集应用程序中成功使用了 PowerManager.PARTIAL_WAKE_LOCK。

当您的显示器关闭时,您的应用程序至少会暂停(系统甚至可能会停止它)。部分唤醒锁定“确保 CPU 正在运行;屏幕和键盘背光将被允许熄灭。” 因此,在字里行间阅读这意味着否则您的 CPU 可能会在短时间内进入睡眠状态以节省电力。

于 2014-01-09T19:33:50.153 回答
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() {} } ?
于 2014-01-09T15:48:39.547 回答