Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用2个进程处理数据库_Android_Database_Sqlite_Android Contentprovider_Synchronize - Fatal编程技术网

Android 使用2个进程处理数据库

Android 使用2个进程处理数据库,android,database,sqlite,android-contentprovider,synchronize,Android,Database,Sqlite,Android Contentprovider,Synchronize,我有一个包含两部分的应用程序 创建内容的服务 使用内容的应用程序 每一个都作为不同的进程运行。问题是它们都共享一个数据库。我经常遇到数据库锁定错误,无论是在服务尝试写入内容时,还是在UI读取数据时。反之亦然。 你怎么办 用于访问DB的类是单例类。但由于UI和服务都是两个不同的进程,所以我认为有两个单例。所以这没用 我想,即使是synchronize也帮不上忙,因为还是因为有两个不同的过程 内容提供商可能是一种选择,但由于我使用复杂的查询来挖掘信息,因此也很难使用它 如何让这两个进程共享数

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

  • 创建内容的服务
  • 使用内容的应用程序
每一个都作为不同的进程运行。问题是它们都共享一个数据库。我经常遇到数据库锁定错误,无论是在服务尝试写入内容时,还是在UI读取数据时。反之亦然。 你怎么办

  • 用于访问DB的类是单例类。但由于UI和服务都是两个不同的进程,所以我认为有两个单例。所以这没用
  • 我想,即使是
    synchronize
    也帮不上忙,因为还是因为有两个不同的过程
  • 内容提供商
    可能是一种选择,但由于我使用复杂的查询来挖掘信息,因此也很难使用它
如何让这两个进程共享数据库。
任何提示都将不胜感激。

以下是一篇关于如何在Android上使用SQLite进行锁定以及需要注意的事项的精彩文章:


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

每次操作后关闭连接

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

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


是否存在isDatabaseInUseMethod?

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

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

我的问题不同。我有两个进程(相当于两个应用程序)试图访问同一个数据库,但它相互锁定。无法在
ContentProviders
上获取一个示例应用程序。另外,我们是否可以在不使用ContentObservators的情况下使用它?是的,您可以在不使用ContentObservators的情况下使用它。观察者只处理更改通知,但您必须手动触发它们,因此如果您想忽略它们,您可以忽略它们。当然,据我所知,没有
isDatabaseInUse
或类似内容。由于服务和活动是不同的过程,它们之间的过程调用并不容易。是的,但您仍然可以捕获异常并重复查询。围绕它做一个while语句。它将在另一个进程关闭其连接时立即执行。在这两个进程中做相同的事情,它们将切换连接-1。这里有太多的错误。这本质上是试图忽略像互斥体这样的东西是为了解决这个问题而发明的。不能保证一个进程会以任何合理的速度放弃,例外情况应该是。。。这是一个例外,而不是规则,投票通常是要避免的。请研究一下实际的解决方案。听起来很有趣。我一直在挖掘这方面的信息。有两个选项BDB和BDB SQL,我显然对后者感兴趣。但是看起来我们需要为SQL版本构建源代码和闪存ROM?OTN论坛是一个很好的起点:是的,我相信您需要构建源代码。我已经请人在OTN论坛上跟进你的问题。你能指导我如何使用berkeley db吗?你找到这个问题的解决方案了吗?