【问题标题】:Two applications using single DB使用单个 DB 的两个应用程序
【发布时间】:2013-12-30 07:26:54
【问题描述】:

我创建了一个应用程序服务。 这两个应用程序使用已放置在 SDCard 上的单个 DB。 我的服务每 30 秒查找新数据并将其推送到服务器。同时,用户使用我的 Application 在数据库中输入一些数据/记录。 它工作正常,如果网络良好但如果网络出现故障,我的应用程序无法将记录插入数据库,因为服务正在等待服务器的响应。 即使我面临同样的问题,我也使用 Singleton 类来纠正我的错误。如何克服这一点?需要帮助的人

【问题讨论】:

  • 我认为您需要为您的数据库编写一个内容提供程序,通过内容提供程序您可以轻松地对数据库执行所有数据库操作
  • content provider不能用于sdcard之外的db

标签: android sqlite service singleton


【解决方案1】:

您基本上是说一个线程无法将数据存储到 SD 卡中,只是因为另一个线程正忙于与某个远程 Web 服务器通信。为什么?

似乎来自网络访问线程的某些同步锁不必要地宽泛,当不需要时锁定数据库。将网络访问代码移到同步语句或锁定数据库的方法之外,尝试尽快启动和完成数据库,中间不要进行其他活动。

【讨论】:

  • 完全一样。实际上我需要检查新数据是否更新到服务器。因此,如果服务器响应失败,我每 30 秒打开一次数据库,这将锁定数据库。有什么要听的吗?
  • 在打开数据库之前通过网络与远程服务器对话。只有在你已经得到响应后才打开数据库。
  • 不管你的网络是好是坏还是关闭,在你开始使用数据库之前完成它。
  • 问题是因为并行执行。 Sqlite 似乎不是线程安全的 stackoverflow.com/questions/6675240/…
【解决方案2】:

对于互联网连接不良,您无能为力。 对您的 http 请求设置超时限制,稍后重试(或侦听连接更改)。

下一次,尽量让您的问题标题与您的问题相关。目前,这与彼此无关。您没有使用 2 个应用程序,问题不在于使用 2 个应用程序的数据库。

【讨论】:

  • 感谢您的回复和建议。即使发生这种情况,我也添加了超时限制
猜你喜欢
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
相关资源
最近更新 更多