我有一个服务,可以在AsyncTasks中从Internet下载数据。它解析数据并将其存储在数据库中。该服务持续运行。
当服务写入数据库时,活动尝试从数据库中读取更改。
我有一个数据库助手,有几种写入和阅读方法。这会引起问题吗?可能试图从两个不同的线程打开数据库?
答案 0 :(得分:2)
在db中已经讨论过很多关于并发性问题的书。
但是像使用维基百科一样使用stackoverflow我发现了一些有趣的thing:
Android上的Sqlite允许您从多个procs访问数据库 读取,但如果您目前正在编写一个进程,则读取和 从其他procs写入将抛出异常,因为第一个 write对数据库有一个锁定。
然后数据库受到其他线程的保护。 坏消息是你必须管理那些异常,如果你有一个大数据库(意味着有很多表有大量的数据交换),那么这可能是一项肮脏的工作。
答案 1 :(得分:2)
只要你只使用SQLiteDatabase
的一个实例,你应该没问题。只需确保只在数据库帮助程序中执行db读/写事务,而不执行其他类。使用相同数据库对象进行的任何事务都将自动为您同步。