2011-10-09 20 views
1

我正在开发一款应用程序,该应用程序需要访问给定传感器的“最后5秒钟的数据”。我的计划是以某种方式存储这些数据,然后当我请求数据时,它会返回在最近5秒内获得的任何数据。我不知道如何有效地做到这一点,因为:收集,存储和检索传感器数据

  1. 的Dalvik不喜欢有大量的对象被创建,所以我不能让每一个传感器读数包含值的对象+时间戳。

  2. 我需要不断地以某种结构存储新数据,同时检索它的特定部分。

我唯一的其他要求是应该丢弃超过5秒的数据。这并不重要,但我想保留这些数据会在记忆中吃掉。

我目前有一个onSensorChanged侦听器设置,所以我不需要帮助。

任何想法?

+0

我假设你正在与[SensorManager](http://developer.android.com/reference/android/hardware/SensorManager.html),为什么不要每秒都轮询一次[Timer](http://developer.android.com/reference/java/util/Timer.html),在你认为合适的地方存储这些值,然后在需要时查询这样的存储库? –

+0

已经看到了SensorEventListener(http://developer.android.com/reference/android/hardware/SensorEventListener.html),所以当你获得新的数据直到它改变。我会建议将这些信息保存在数据库本地,并使用LoaderManager通过光标访问 – Necronet

+0

@NanoTaboada这就是问题所在,使用哪个存储库以及如何查询它? – Glitch

回答

1

也许预先分配足够的对象来存储5秒的数据并将它们存储在池中。从池中获取对象,添加时间戳和值并插入到有序集中。插入一个旧的对象并将它们放回池中后,请删除所有旧对象。或者也许你可以只通过一个循环缓冲区http://en.wikipedia.org/wiki/Circular_buffer

+0

我能看到的一个问题是我不知道需要多少物体。我想我可以限制传感器的轮询,但是这是没有办法让我知道SENSOR_DELAY_FASTEST等等的真正含义,所以上限是不确定的。我想我可以在填满时“覆盖”对象,但如果有干净的方法去做,我宁愿避免。 – Glitch

+0

运行一些测试或做一些计算,并得到你可能需要多少的一些想法。如果需要可能会分配更多。 –

+0

好的,这应该工作。有没有我应该考虑实施“游泳池”的课程? – Glitch