1

我正在编写一个 Android 应用程序,其中包括

  1. 后台服务 1,它定期读取传感器值(例如,程序每五分钟读取一次传感器值 30 秒,在测量期间每秒读取两次值),
  2. 后台服务 2,它分析传感器值并从中计算一些指标,
  3. 后台服务 3,每 3-7 天运行一次,并从数据库中删除旧数据(传感器值和指标)和
  4. 如果用户打开应用程序并按下某个按钮,则显示一些传感器值和/或指标的 GUI 活动。

将有 2 张桌子 -SensorDataMetrics. 后台服务 1 将写入SensorData. 后台服务 2 将读取SensorData和写入Metrics. 后台服务 3 将从两个表中删除行。GUI 活动将从两个表中读取。

我正在考虑如何为传感器值和指标实现线程安全存储。

一个明显的解决方案是使用内置的 SQLite 数据库。

我有以下问题:

  1. 在这种情况下使用安全吗?
  2. Android 的 SQLite 会每秒处理两次写入两个数值 (long和) 吗?double
  3. 它是否支持并发访问(当 GUI 活动发出查询SensorData并且后台服务 1 尝试同时写入同一个表时会发生什么情况)?
4

1 回答 1

2
  1. 通过将SQLiteOpenHelper用作单例,您是线程安全的。SQLiteOpenHelper处理 sqlite 数据库的锁定(这是处理并发读/写的 sqlite 机制)。
  2. 这是要测试的东西。但是,一般来说,您是否需要经常写入数据库?您可以将数据缓存在内存中并以较慢的速度将它们刷新到数据库中。
  3. 简短的回答是“是的,它支持并发访问”。有关详细信息,请查看此sqlite 文档,android sqlite 只是对此的包装。您可以在阅读本文档后将其配置为您认为合适的行为方式。
于 2013-06-19T19:24:03.850 回答