gpt4 book ai didi

android - android SQLite 的数据库队列

转载 作者:行者123 更新时间:2023-11-30 03:17:41 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,它包含一个相当大的数据库,可以从多个线程访问该数据库。我开始遇到数据库锁定异常。我的问题是,有没有一种方法可以创建数据库队列(类似于 iOS 中的 FMDataBase.Queue)?

我已经做了一些研究,但我不想创建一个辅助类,因为我的很多数据库查询和插入都是不同的,因此为每个查询创建一个方法是不可行的。

我可以放

if(!db.isLocked)
{
//exec(BLAH)
}
else
{
//try{thread.sleep(1000);}... then some retry code
}

在每个数据库功能上,但必须有比这更好的方法。

此外,如果线程在休眠 1000 毫秒后被锁定,它仍然会崩溃,如果数据库被锁定 10 毫秒,我将等待 990 毫秒来运行查询,这对用户体验来说不是很好。

是否可以创建一个队列,以便在数据库解锁后执行发送到数据库的任何命令?

任何建议将不胜感激

最佳答案

My question, is there a way of creating a database Queue

将所有数据库写入移动到一个 IntentService,一个托管 LinkedBlockingQueue 的常规服务,一个由您的单例 SQLiteOpenHelper 持有的 LinkedBlockingQueue

a lot of my database queries and inserts are different so creating a method for each query is not feasible.

用一种方法包装数据库 I/O 的开销不是特别多,比您在问题中建议的要少。

if the db is locked for 10ms I will be waiting for 990ms for the query to run, which is not great for user experience

调整您的数据库访问(例如,EXPLAIN 关键字,然后设置适当的索引)。使用 Traceview 来确定您的问题所在。如果您的问题出在数据库事务中(例如,您打开自己的事务并在其中执行大量工作),请考虑 using yieldIfContendedSafely() .

关于android - android SQLite 的数据库队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19755142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com