我正在编写一个 Android 应用程序,它将包含
- 后台服务 1,它定期读取传感器值(例如程序每五分钟读取一次传感器值 30 秒,在测量期间每秒读取两次值),
- 后台服务 2,它分析传感器值并从中计算一些指标,
- 后台服务 3,每 3-7 天运行一次,并从数据库中删除旧数据(传感器值和指标)和
- 一个 GUI Activity ,如果用户打开应用程序并按下某个按钮,它会显示一些传感器值和/或指标。
将有 2 个表 - SensorData
和 Metrics
。后台服务 1 将写入 SensorData
。后台服务 2 将从 SensorData
读取并写入 Metrics
。后台服务 3 将从两个表中删除行。 GUI Activity 将从两个表中读取。
我在考虑如何为传感器值和指标实现线程安全存储。
一个明显的解决方案是使用内置的 SQLite 数据库。
我有以下问题:
- 在这种情况下使用安全吗?
- Android 的 SQLite 是否可以每秒处理两次写入两个数值(
long
和double
)? - 它是否支持并发访问(当 GUI Activity 对
SensorData
发出查询并且后台服务 1 尝试同时写入同一个表时会发生什么)?
最佳答案
- 通过将
SQLiteOpenHelper
用作单例,您是线程安全的。SQLiteOpenHelper
处理 sqlite 数据库的锁定(这是处理并发读/写的 sqlite 机制)。 - 这是要测试的东西。但是,一般来说,您需要经常写入数据库吗?您可以将数据缓存在内存中,然后以较慢的速度将它们刷新到数据库中。
- 简短的回答是“是的,它支持并发访问”。有关详细信息,请查看此 sqlite document , android sqlite 只是对此的包装。阅读本文档后,您可以将其配置为按照您认为合适的方式运行。
关于android - 使用Android内置的SQLite存储来存储并发数据可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17164013/