【问题标题】:Best strategy to Update SQLite DB in background task while using Database使用数据库时在后台任务中更新 SQLite DB 的最佳策略
【发布时间】:2011-05-05 05:42:18
【问题描述】:

我有一个允许用户查询 sqlite 数据库的应用程序。当应用程序启动时,它会下载一个 URL,以查看后台线程上是否有任何数据库更新。

不幸的是,如果用户选择了一个在更新运行时尝试查询数据库的函数,这会导致发生锁定。

我的问题是双重的。

  1. 在这种情况下避免冲突的最佳策略是什么。

    • 将数据库复制到另一个文件更新并复制回来
    • 拥有某种单例操作并使用它来调度队列中的操作。
    • 循环并等待锁打开(虽然我不想阻止用户)
  2. 是否可以在应用程序终止之前暂停后台线程并在应用程序终止之前运行更新。

如果有人有任何建议,我将不胜感激,因为我需要运行更新,而用户无需停止使用该应用程序。

【问题讨论】:

  • 我最近一直在路上,所以仍在努力......

标签: iphone sqlite background-process


【解决方案1】:

为了回答您的问题,我相信第 1 点第 3 点是针对您在 Iphone 上的特定问题的最佳解决方案。鉴于您无法启动另一个线程来进行后台处理,因此稍等片刻(大多数程序在开始时都有)是标准操作。

我不会尝试实现在应用程序终止时推送更新的方法。太多次,当人们只想继续做其他事情时,他们停止了(包括我自己)运行应用程序。

IMO,在程序开始时等待(希望不要太久)是解决此问题的最佳方法。

【讨论】:

  • 是的,开始时的等待并没有发生,因为它是 UI 可以免费使用的后台线程。另一种选择是让我暂时锁定用户并告诉他们数据库正在更新,但我被要求不要这样做
  • 需要多长时间?没有描述的图标(沙漏,旋转的圆圈,小动物围成一圈)的几秒钟永远不会被视为强制等待......在当今世界,每个人都非常习惯这种解决方案:)
  • 你可以实现一个图标,启动一个定时器,在后台线程完成时发送一个事件。
  • 是的,我正在考虑使用 UIAlertView / progressView,并且我已经有一个显示消息和 UIActivityView 的全屏覆盖视图,但在查询或更新开始的那一刻可能正在使用中。跨度>
【解决方案2】:

请澄清 - 听起来数据库查询应该是一个非常简短、快速的功能,尽管 URL 下载可能是一个更长的操作。您是否在整个 URL 下载操作期间持有数据库锁?如果是这样,我认为您希望将 URL 下载作为一项操作进行 - 一旦收到所有数据 - 快速将其应用到您的数据库,因此在 URL 下载期间不保留数据库。

【讨论】:

  • 数据库查询很短。 URL 下载再次在后台发生,没问题我在 URL 下载完成之前不打开数据库。当我尝试处理 URL 并创建 SQL 语句来更新数据库时,就会出现问题。更新速度也不一定是问题,只是用户可以在同一实例中执行一个功能,在处理更新时从数据库请求数据。
  • 鉴于文件锁定的限制,我想我只是想了解最佳解决方案
  • 对我来说完全清楚:更新过程也在后台线程上发生。
猜你喜欢
  • 1970-01-01
  • 2011-01-20
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 2020-08-25
  • 2018-10-14
相关资源
最近更新 更多