使用数据库时在后台任务中更新SQLite DB的最佳策略

时间:2010-11-04 18:28:21

标签: iphone sqlite background-process

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

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

我的问题是双重的。

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

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

  3. 如果有人有任何建议我会很感激,因为我需要在没有用户停止使用该应用程序的情况下运行更新。

2 个答案:

答案 0 :(得分:0)

要回答您的问题,我相信#1点3是您在Iphone上遇到特定问题的最佳解决方案。看到你无法启动另一个线程来进行后台处理,等待很少(大多数程序在开始时都有)是标准操作。

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

IMO,等待计划开始(希望不会太长)是解决这个问题的最佳方法。

答案 1 :(得分:0)

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