我有一个正在进行大量sqllite事务的应用程序,我目前有点挂起,因为我正在UI线程上执行sqllite操作......是坏事......
所以我让每个项目都有一个线程并执行它假设sqllite api足够智能FIFO它们.. nope ...现在我得到数据库是锁定异常
没有完全重写我的代码,并且有一个事务列表排队并在同一个线程上执行它们(许多不同的类,会有点痛苦)
有没有办法让我检查,除非没有锁,否则不执行线程?一个锁定检查本身,或类似的东西,这将有效,并不是一个巨大的重写?
由于
答案 0 :(得分:1)
我引用的答案似乎令人困惑。当您使用具有多个线程的相同数据库对象访问同一Android数据库时,您不必执行任何操作 special 。在幕后,Sqlite有自己的锁定来保证数据库不会被破坏。引用my answer;
Android下的Sqlite是单线程的。即使多个线程使用相同的数据库连接,我的理解是它们将被阻止并发运行。没有办法解决这个限制
它有自己的锁定来序列化请求。这意味着不幸的是,添加多个线程不会提高数据库的性能。
正如我的另一个回答所提到的,你不能从多个线程使用多个数据库对象到同一个数据库,因为没有锁定,你将损坏你的数据库。