我有一个应用程序,它有两个部分。
- 创建内容的服务。
- 使用内容的应用程序
每个进程都作为不同的进程运行。问题是两者共享一个数据库。我经常得到数据库锁定错误,无论是当服务试图写东西和用户界面是阅读数据。反之亦然。怎么办?
- 用于访问DB的类是一个单例类。但是由于UI和服务都是2个不同的进程,我假设有2个单例。所以这没有帮助。
- 我想即使
synchronise
也不会有帮助,因为又有两个不同的进程。 Content Providers
可能是一个选项,但由于我使用复杂的查询来挖掘信息,因此也很难使用它。
如何让两个进程共享数据库。任何提示将不胜感激。
4条答案
按热度按时间gdrx4gfi1#
使用内容提供商是一种选择。另一个是看看Berkeley DB。BDB SQL API与SQLite兼容,BDB锁管理器允许多个线程和/或进程并发地读/写数据库。
d5vmydt92#
每次操作后关闭连接
捕获数据库锁定错误并尝试在50毫秒后重新连接
或者让服务处理数据库,而Activity向服务请求数据
可能有isDatabaseIncidentMethod?
pvcm50d13#
您应该使用内容提供程序通过一个源引导数据库查询。在内容提供程序内部,您可以使用任何锁定机制来确保您没有并发访问。您还可以考虑使用内容观察器来协调服务操作与数据库更改。
ffscu2ro4#
以下是一篇关于锁定如何在Android上与SQLite一起工作以及需要注意的事项的优秀文章:http://kagii.squarespace.com/journal/2010/9/10/android-sqlite-locking.html
我想你会在这里找到答案的:)