androidsqlite的数据库队列

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

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

我做了一些研究,我不想创建一个helper类,因为我的很多数据库查询和插入都是不同的,所以为每个查询创建一个方法是不可行的

我可以把

if(!db.isLocked)
{
    //exec(BLAH)
}
 else
{
  //try{thread.sleep(1000);}... then some retry code
}
在每个数据库函数上,但必须有比这更好的方法

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

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

如有任何建议,将不胜感激

我的问题是,有没有办法创建数据库队列

将所有数据库写入移动到
IntentService
、托管
LinkedBlockingQueue
的常规服务、由singleton
SQLiteOpenHelper
持有的
LinkedBlockingQueue

我的很多数据库查询和插入都是不同的,因此为每个查询创建一个方法是不可行的

在方法中封装数据库I/O的开销并不特别大,比您在问题中建议的要小

如果数据库被锁定10毫秒,我将等待990毫秒,以便查询运行,这对用户体验不是很好

调整数据库访问(例如,
EXPLAIN
关键字,然后设置适当的索引)。使用Traceview确定问题的确切位置。如果您的问题在数据库事务中(例如,打开您自己的事务并在其内部进行大量工作),请考虑./P> 我的问题是,有没有办法创建数据库队列

将所有数据库写入移动到
IntentService
、托管
LinkedBlockingQueue
的常规服务、由singleton
SQLiteOpenHelper
持有的
LinkedBlockingQueue

我的很多数据库查询和插入都是不同的,因此为每个查询创建一个方法是不可行的

在方法中封装数据库I/O的开销并不特别大,比您在问题中建议的要小

如果数据库被锁定10毫秒,我将等待990毫秒,以便查询运行,这对用户体验不是很好


调整数据库访问(例如,
EXPLAIN
关键字,然后设置适当的索引)。使用Traceview确定问题的确切位置。如果您的问题在数据库事务中(例如,打开您自己的事务并在其内部进行大量工作),请考虑./P>ItService在Android O上不再可行。(@MooingDuck:
IntentService
仍然可行;它只需要处于前台。除了我在回答中提到的选项之外,我们现在还有其他选项:基于RxJava的队列、
WorkManager
等。IntentService在Android O上不再可行:(@MooingDuck:
IntentService
仍然是可行的;它只需要处于前台。除了我在回答中提到的选项之外,我们现在还有其他选项:基于RxJava的队列、
WorkManager
等。