23

我有一个包含 2 个部分的应用程序。

  • 创建内容的服务。
  • 使用内容的应用程序

这些中的每一个都作为不同的进程运行。问题是它们都共享一个数据库。而且我经常遇到数据库锁定错误,无论是在服务尝试写入内容还是 UI 正在读取数据时。反之亦然。怎么办?

  • 用于访问 DB 的类是单例类。但是由于 UI 和服务都是 2 个不同的进程,所以我认为有 2 个单例。所以这没有帮助。
  • 甚至synchronise我想也无济于事,因为这又是因为两个不同的过程。
  • Content Providers也许是一种选择,但由于我使用复杂的查询来挖掘信息,所以也很难使用它。

如何让两个进程共享数据库。任何线索将不胜感激。

4

4 回答 4

8

使用内容提供者是一种选择。另一个是看看Berkeley DB。BDB SQL API与 SQLite 兼容,BDB 锁管理器允许多个线程和/或进程同时读取/写入数据库。

于 2011-03-10T20:31:42.757 回答
3

每次操作后关闭连接

捕获数据库锁定错误并尝试在 50 毫秒后重新连接

或者让服务处理数据库,活动向服务请求数据

可能有 isDatabaseInUseMethod 吗?

于 2011-03-09T21:15:15.860 回答
1

您应该使用内容提供者通过一个来源汇集您的数据库查询。在内容提供者内部,您可以使用任何您希望确保没有并发访问的锁定机制。您还可以考虑使用内容观察器来协调服务操作和数据库更改。

于 2011-03-09T21:52:37.980 回答
0

以下是一篇很棒的文章,介绍了如何在 Android 上使用 SQLite 进行锁定以及需要注意的事项:http: //kagii.squarespace.com/journal/2010/9/10/android-sqlite-locking.html

我想你会在那里找到一些答案:)

于 2011-03-09T15:55:35.843 回答