androidsqlite的数据库队列
我有一个Android应用程序,它拥有一个相当大的数据库,可以从多个线程访问。我开始得到数据库锁定异常。我的问题是,有没有办法创建数据库队列(类似于iOS中的FMDataBase.Queue) 我做了一些研究,我不想创建一个helper类,因为我的很多数据库查询和插入都是不同的,所以为每个查询创建一个方法是不可行的 我可以把androidsqlite的数据库队列,android,database,multithreading,sqlite,Android,Database,Multithreading,Sqlite,我有一个Android应用程序,它拥有一个相当大的数据库,可以从多个线程访问。我开始得到数据库锁定异常。我的问题是,有没有办法创建数据库队列(类似于iOS中的FMDataBase.Queue) 我做了一些研究,我不想创建一个helper类,因为我的很多数据库查询和插入都是不同的,所以为每个查询创建一个方法是不可行的 我可以把 if(!db.isLocked) { //exec(BLAH) } else { //try{thread.sleep(1000);}... then som
if(!db.isLocked)
{
//exec(BLAH)
}
else
{
//try{thread.sleep(1000);}... then some retry code
}
在每个数据库函数上,但必须有比这更好的方法
此外,如果线程在is睡眠1000毫秒后被锁定,它仍然会崩溃,如果db被锁定10毫秒,我将等待990毫秒以运行查询,这对用户体验来说不是很好
是否可以创建一个队列,以便在数据库解锁后执行发送到数据库的任何命令
如有任何建议,将不胜感激
我的问题是,有没有办法创建数据库队列
将所有数据库写入移动到IntentService
、托管LinkedBlockingQueue
的常规服务、由singletonSQLiteOpenHelper
持有的LinkedBlockingQueue
等
我的很多数据库查询和插入都是不同的,因此为每个查询创建一个方法是不可行的
在方法中封装数据库I/O的开销并不特别大,比您在问题中建议的要小
如果数据库被锁定10毫秒,我将等待990毫秒,以便查询运行,这对用户体验不是很好
调整数据库访问(例如,EXPLAIN
关键字,然后设置适当的索引)。使用Traceview确定问题的确切位置。如果您的问题在数据库事务中(例如,打开您自己的事务并在其内部进行大量工作),请考虑./P>
我的问题是,有没有办法创建数据库队列
将所有数据库写入移动到IntentService
、托管LinkedBlockingQueue
的常规服务、由singletonSQLiteOpenHelper
持有的LinkedBlockingQueue
等
我的很多数据库查询和插入都是不同的,因此为每个查询创建一个方法是不可行的
在方法中封装数据库I/O的开销并不特别大,比您在问题中建议的要小
如果数据库被锁定10毫秒,我将等待990毫秒,以便查询运行,这对用户体验不是很好
调整数据库访问(例如,
EXPLAIN
关键字,然后设置适当的索引)。使用Traceview确定问题的确切位置。如果您的问题在数据库事务中(例如,打开您自己的事务并在其内部进行大量工作),请考虑./P>ItService在Android O上不再可行。(@MooingDuck:IntentService
仍然可行;它只需要处于前台。除了我在回答中提到的选项之外,我们现在还有其他选项:基于RxJava的队列、WorkManager
等。IntentService在Android O上不再可行:(@MooingDuck:IntentService
仍然是可行的;它只需要处于前台。除了我在回答中提到的选项之外,我们现在还有其他选项:基于RxJava的队列、WorkManager
等。