我会尽量清楚,但如果需要更多关于代码的细节,我可以提供。Android SQLite mult线程问题
我们有一个应用程序ABC提供访问通过aidl活页夹做Db。客户端应用程序XYZ在ABC应用程序上执行对DAO实现的IPC调用。像select,insert,update和delete这样的命令工作得很好,但是当我们在事务中调用这些命令时,我们遇到了问题。
基本上第一次调用SQLiteDatabase.beginTransaction() - 通过一个绑定对象 - 设置SQLite上的新事务并且方法SQLiteDatabase.inTransaction()返回true。然后,当我们调用anyDAO.insert(...)时,请检查inTransaction()是否返回false。
我们发现第一个调用(beginTransaction)是在线程TID#1中的服务中执行的,第二个(insert)是在另一个线程TID#2中执行的。更改代码(仅用于测试)执行beginTransaction并插入单个IPC调用中,但我们需要单独调用。
问题:SQLite是否准备好在不同线程中处理事务和SQL命令?
我已经给你一个将每个AIDL调用重定向到指定线程的工作代码,那么为什么你不使用它? – pskink
@pskink我们正在使用我们的代码。但是因为时间在流逝,我们设置了另一位开发人员以不同的方式工作,并且在一天结束时我们得到了答案:您的代码将我们推向了一个可行的解决方案(我们将在另一个问题中发布结果)。我们还发现,在SQLite中,当您在线程中启动Transacion时,必须在同一线程中执行其他命令,否则您没有事务。 –