2011-10-04 72 views
3

我有一个从AsyncTasks中的Internet下载数据的服务。它解析数据并将其存储在数据库中。该服务持续运行。来自Android中不同线程的数据库访问

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

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

回答

2

在db中已经讨论过很多关于并发问题的书籍。

但使用计算器像维基百科我已经发现了一些有趣thing

Android上的SQLite的,您可以从多个特效访问数据库 读取,但如果你现在从一个进程写,读而 写入其他特效会抛出异常,因为写入的第一个 对db有锁定。

然后数据库被很好的保护免受其他线程坏消息是,你必须管理那些例外,并且如果你有一个大的数据库(这意味着有很多数据交换的表很多)

+0

谢谢!我猜不一定是个大问题。如果服务拥有一个db-helper的实例并且另一个活动。那么我只需要在db-helper的每个方法中尝试/捕获?! – johan

2

只要你只使用一个实例SQLiteDatabase,你应该没问题。只要确保只在数据库帮助程序中执行数据库读取/写入事务,而不能使用其他类。任何使用相同数据库对象进行的事务将自动同步。