Kar*_*urg 5 java sqlite android
几个小时以来,我一直试图弄清楚为什么我的应用程序数据库会死锁。
我有一个应用程序,它从活动中读取数据库并从服务中写入数据库。很直接。
我将我的数据库连接设置为一个实例:
public static synchronized MuseoDatabase getInstance(Context context){
if(sInstance == null){
sInstance = new MuseoDatabase(context);
}
return sInstance;
}
Run Code Online (Sandbox Code Playgroud)
在我的服务中,我有一个Runnable定期更新数据库的事务。有时甚至有大块(300 多个条目)的数据。
在服务中,我打开了用于写入的实例
final SQLiteDatabase db = MuseoDatabase.getInstance(getApplicationContext()).getWritableDatabase();
Run Code Online (Sandbox Code Playgroud)
该服务工作正常。它很好地更新了数据库,那里一切都很好。
现在我有一个接受 RFID 和数字代码输入的活动,它们都通过一种validateCode()方法进行验证。
为此,我以读取模式打开数据库实例
final SQLiteDatabase db = MuseoDatabase.getInstance(getApplicationContext()).getReadableDatabase();
Run Code Online (Sandbox Code Playgroud)
正如我上面所说,RFID uuid 和数字代码都通过相同的方法进行验证,因为该值保存在同一个 SQLite 表中。
当我验证代码时,一切正常。它正确地检查数据库中的代码以及它是否有效等。但是现在如果我要读取 RFID:死锁和错误:
The connection pool for database has been unable to grant a connection to thread 602 (Binder_2) with flags 0x1
Run Code Online (Sandbox Code Playgroud)
它甚至会导致应用程序的 RFID 阅读器出现故障(不再检测到 rfid 卡)。数字代码没有问题,但是当使用 rfid 时,尽管他们都起诉了相同的方法,但它只是失败了。
由于rfid卡故障后,数字代码仍然继续起作用,这使得它更加奇怪。
我哪里出错了?
| 归档时间: |
|
| 查看次数: |
2041 次 |
| 最近记录: |