Android同步数据库操作 - “数据库被锁定”

时间:2010-11-29 09:18:06

标签: android database simultaneous

我正在编写一个带有“在线模式”的应用程序,即根据需要下载,解析数据并将其插入到SQLite数据库中。所有这些都是由服务完成的。该应用程序包含多个要求服务进行数据更新的活动(根据活动不同的数据)。

当用户浏览活动时(无需等待服务完成),很容易获得SQLiteExceptions(消息:数据库被锁定)。

我考虑过使用同步块,但这会强制用户在服务完成更新时加载新活动(需要加载数据库访问权限)时等待。所以这似乎是一个死胡同。

另一种选择可能是在每个活动的onStop方法中停止更新。当然,更新将被中断,但这不是一个大问题。问题在于我不确定如何处理它。

我的问题是,我该如何处理?

1 个答案:

答案 0 :(得分:7)

如果您的活动只是阅读而不是像我的情况那样写入数据库,那么这就是我所做的解决方法:

  • 创建一个服务(即DatabaseService 0并将其用作访问数据库的中心点(即打开数据库连接),以确保一次只有一个dbhelper。
  • 需要访问数据库的所有活动和服务必须建立与DatabaseService的连接
  • 确保只有您的DownloadService的线程能够写入数据库并且它应该使用事务
  • 之后,您可以使用getReadable数据库来读取/使用连接来停止下载服务等。

请确保您只使用1个dbhelper。