【发布时间】:2011-10-04 21:08:08
【问题描述】:
我有一个服务,可以在 AsyncTasks 中从 Internet 下载数据。它解析数据并将其存储在数据库中。该服务连续运行。
在服务写入时,Activity 尝试从数据库中读取数据。
我有一个数据库助手,有几种读写方法。这会导致问题吗?可能试图从两个不同的线程打开数据库?
【问题讨论】:
我有一个服务,可以在 AsyncTasks 中从 Internet 下载数据。它解析数据并将其存储在数据库中。该服务连续运行。
在服务写入时,Activity 尝试从数据库中读取数据。
我有一个数据库助手,有几种读写方法。这会导致问题吗?可能试图从两个不同的线程打开数据库?
【问题讨论】:
关于 db 中的并发问题已经讨论并撰写了许多书籍。
但是像维基百科一样使用stackoverflow,我发现了一些有趣的thing:
android 上的 Sqlite 允许您从多个 proc 访问数据库 读取,但如果您当前正在从一个进程写入,则读取并 来自其他 proc 的写入将引发异常,因为第一个 write 在 db 上有一个锁。
那么数据库受到很好的保护,不受其他线程的影响。 坏消息是你必须管理这些异常,如果你有一个大数据库(意味着有很多数据交换的大表),这可能是一项肮脏的工作
【讨论】:
只要您只使用SQLiteDatabase 的一个实例,就应该没问题。只要确保只在您的数据库助手中执行您的数据库读/写事务,而不是其他类。使用相同数据库对象进行的任何事务都将自动为您同步。
【讨论】: