来自Android中不同线程的数据库访问
问题描述:
我有一个从AsyncTasks中的Internet下载数据的服务。它解析数据并将其存储在数据库中。该服务持续运行。来自Android中不同线程的数据库访问
在服务写入数据库时,活动尝试从数据库中读取数据。
我有一个数据库帮手,有几种写作和阅读方法。这会导致问题吗?可能试图从两个不同的线程打开数据库?
答
在db中已经讨论过很多关于并发问题的书籍。
但使用计算器像维基百科我已经发现了一些有趣thing:
Android上的SQLite的,您可以从多个特效访问数据库 读取,但如果你现在从一个进程写,读而 写入其他特效会抛出异常,因为写入的第一个 对db有锁定。
然后数据库被很好的保护免受其他线程。 坏消息是,你必须管理那些例外,并且如果你有一个大的数据库(这意味着有很多数据交换的表很多)
答
只要你只使用一个实例SQLiteDatabase
,你应该没问题。只要确保只在数据库帮助程序中执行数据库读取/写入事务,而不能使用其他类。任何使用相同数据库对象进行的事务将自动同步。
谢谢!我猜不一定是个大问题。如果服务拥有一个db-helper的实例并且另一个活动。那么我只需要在db-helper的每个方法中尝试/捕获?! – johan