1

我有一个正在执行大量 sqllite 事务的应用程序,我目前遇到了一些问题,因为我正在 UI 线程上执行 sqllite 操作……是的,很糟糕……

所以我让每个项目都有一个线程并在其上执行假设 sqllite api 足够聪明,可以对它们进行 FIFO ......不......现在我得到了数据库被锁定的异常

这说它应该工作

没有完全重写我的代码,并且有一个事务列表排队并在同一个线程上执行它们(许多不同的类,会有点痛苦)

有没有办法让我检查,除非没有锁,否则不执行线程?锁检查本身,或类似的东西可以让它工作,是有效的,不是一个巨大的重写?

谢谢

4

1 回答 1

1

您引用的我的回答似乎令人困惑。当您使用具有多个线程的同一个数据库对象访问同一个 Android 数据库时,您不必做任何特别的事情。在幕后,Sqlite 有自己的锁定来保证数据库不会被破坏。引用我的回答

Android下的Sqlite是单线程的。即使多个线程使用同一个数据库连接,我的理解是它们会被阻止并发运行。没有办法绕过这个限制

它有自己的锁来序列化请求。这意味着不幸的是,添加多个线程不会提高数据库的性能。

正如我的其他答案所提到的,您不能从多个线程将多个数据库对象用于同一个数据库,因为没有锁定并且您将损坏您的数据库。

于 2013-02-18T14:54:04.470 回答