我构建了一个简单的应用程序,它接受用户输入的数据并将其保存到本地 sqlite 数据库。如果 wifi 连接可用,它会将数据传输到远程服务器上托管的 REST 服务。
我已经完成了上面的部分,并且工作得很好。如果 WIFI 不可用,它将继续前进并期待来自用户的新数据。
当 wifi 可用时,我注册了一个广播接收器,它将访问我的数据库并获取存储的值并将它们发送到远程服务器。
我想知道,当广播接收器尝试查询我的数据库时,如果用户同时输入数据并且数据保存在同一个数据库中,是否会引发 SQLException。
我记得,一次只有一个服务可以访问 SQL 实例。如果它会带来问题,我该怎么做才能克服它。我研究过 ContentProviders,这就是解决方案吗?
我对 Android 还很陌生。请指教。
最佳答案
您可能想看看这个。
What are the best practices for SQLite on Android?
对我来说,我建议当您需要数据库时,总是与 DatabaseHelper 一起创建 ContentProvider,无论您是否需要向外部应用程序提供数据。这实际上并不难做到,我用来构建ContentProvider的最佳引用是DeskClock ,Android 的官方应用程序。
编辑: 作为旁注,您应该考虑创建一个由您的广播接收器调用的 IntentService 来完成工作,因为广播接收器不应该用于长时间运行的任务,例如将内容发送到服务器。
When it runs on the main thread you should never perform long-running operations in it (there is a timeout of 10 seconds that the system allows before considering the receiver to be blocked and a candidate to be killed).
关于java - 从广播接收器以及应用程序访问数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32643159/