【问题标题】:Database access from different threads in AndroidAndroid中不同线程的数据库访问
【发布时间】:2011-10-04 21:08:08
【问题描述】:

我有一个服务,可以在 AsyncTasks 中从 Internet 下载数据。它解析数据并将其存储在数据库中。该服务连续运行。

在服务写入时,Activity 尝试从数据库中读取数据。

我有一个数据库助手,有几种读写方法。这会导致问题吗?可能试图从两个不同的线程打开数据库?

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    关于 db 中的并发问题已经讨论并撰写了许多书籍。

    但是像维基百科一样使用stackoverflow,我发现了一些有趣的thing

    android 上的 Sqlite 允许您从多个 proc 访问数据库 读取,但如果您当前正在从一个进程写入,则读取并 来自其他 proc 的写入将引发异常,因为第一个 write 在 db 上有一个锁。

    那么数据库受到很好的保护,不受其他线程的影响坏消息是你必须管理这些异常,如果你有一个大数据库(意味着有很多数据交换的大表),这可能是一项肮脏的工作

    【讨论】:

    • 谢谢!我想这不一定是一个大问题。如果服务拥有 db-helper 的一个实例,而该活动拥有另一个。然后我只需要在 db-helper 的每个方法中尝试/捕获?!
    【解决方案2】:

    只要您只使用SQLiteDatabase 的一个实例,就应该没问题。只要确保只在您的数据库助手中执行您的数据库读/写事务,而不是其他类。使用相同数据库对象进行的任何事务都将自动为您同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2017-01-15
      • 1970-01-01
      相关资源
      最近更新 更多