gpt4 book ai didi

android - 在 Android 上存储传感器数据和转储事件文件

转载 作者:行者123 更新时间:2023-11-29 23:19:21 25 4
gpt4 key购买 nike

我编写了一个 Android 7 应用程序,用于将智能手机的传感器数据存储在 SQLite 数据库中。例如,对于加速度计,我得到的值如下:

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
public final void onSensorChanged(SensorEvent event) {
long timeNano = System.nanoTime();
long timeMilli = System.currentTimeMillis();
// Save to database
}

可以看出,在每次调用 onSensorChanged 时(即当新的传感器值到达时),我还会检索并存储当前时间戳(以毫秒和纳秒为单位)。我认为检索这些时间戳总是需要一些时间(几十毫秒)。我的传感器采样率非常高。

当我为我得到的每个传感器值检索时间戳时,这是一个问题吗?我担心的只是我在传感器值中添加了人为延迟(排队),以防传感器值比检索毫秒和纳秒时间戳更快地到达。

其次,我还想转储 /dev/input/event7 文件(在有根电话上)。我可以将其直接存储在数据库中(与传感器数据一样),也可以将其转储到文本文件中。

哪个是更好的选择,文本文件是否有可能被损坏(例如,当它最后没有正确关闭或出现写入错误时)?我认为数据库是安全的,应该始终处于一致的状态。

最佳答案

SENSOR_DELAY_UI = 60,000 微秒 = 60,0 毫秒延迟。

我们无法确定获取时间戳的速度。在昂贵的设备上,这可能需要 10 毫秒。在便宜的设备上,可能需要 100 毫秒。

此外,将数据存储在数据库/文件中会增加很多毫秒,启动新线程以离岸该过程也是如此。

快速提醒:不要忘记您指定的延迟只是建议的延迟,因此延迟可以低于指定的延迟。 Source

因此:在您的超高速手机上获取这些时间戳可能不是问题,因为它足够快以允许获取时间戳并将其存储在数据库/文件中,但在其他速度较慢的手机上可能会出现问题.

您的阅读会出现空白。例如,如果对 onSensorChanged() 的一次调用需要10秒,每50微秒这个函数就是指定的延迟,那么每10秒和每10秒加50微秒之间就会调用一次。

您可以接受有时不得不“跳过”onSensorChanged() 调用这一事实。要降低发生这种情况的可能性,您可以指定更大的延迟。您可以指定以微秒为单位的自定义延迟时间 mSensorManager.registerListener(this, mAccelerometer, 1000*1000);

关于第二个问题:我不太了解有根电话,但我知道文件。

读出/dev/input/event7 并将其存储在数据库中可能比将内容快速写入某个文本文件需要更长的时间,如果这仍然是关于快速的话。

如果您有 2 个写入操作同时写入 1 个文件,那么文本文件将发生损坏。在打开第二个输出流之前,您应该始终关闭第一个输出流。通常,捕获写入错误时,总是关闭输出流。执行这两件事可确保没有文件损坏。

通常来说,写入数据库比写入文本文件更安全,因为数据库旨在处理多次写入、潜在危险的写入等。

关于android - 在 Android 上存储传感器数据和转储事件文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com