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

问题描述 投票:0回答:4

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

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

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

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

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

android database sqlite android-contentprovider synchronize
4个回答
8
投票

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


3
投票

每次操作后关闭连接

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

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

可能有 isDatabaseInUseMethod 吗?


1
投票

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.