3

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

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

我的问题是双重的。

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

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

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

4

2 回答 2

0

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

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

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

于 2010-11-04T18:51:58.540 回答
0

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

于 2010-11-04T18:55:16.453 回答