greendao
打算在多进程环境中工作?
查看源代码,由于缓存的处理方式和其他一些原因,它似乎不支持多进程环境。我正在寻找开发人员的确认或更多详细信息。
通过我们当前的测试,我们让它在一个多线程的进程中运行良好。然而,当我们引入一个访问同一个数据库的单独进程时,我们经常会遇到database is locked
异常。
我们的测试启动了两个不同的进程,它们都启动了两个线程,这些线程随机生成daos
到同一个数据库中。我们还有第三个进程,它启动两个线程,这些线程不断地daos
从同一个数据库中加载所有数据。
Failure 5 (database is locked) on 0x2d3050 when executing 'BEGIN EXCLUSIVE;'
04-09 14:41:27.161: W/dalvikvm(20745): threadid=10: thread exiting with uncaught exception (group=0x40018560)
04-09 14:41:27.161: W/dalvikvm(20745): threadid=9: thread exiting with uncaught exception (group=0x40018560)
04-09 14:41:27.161: I/Process(20745): Sending signal. PID: 20745 SIG: 9
04-09 14:41:27.161: E/AndroidRuntime(20745): FATAL EXCEPTION: Thread-11
04-09 14:41:27.161: E/AndroidRuntime(20745): android.database.sqlite.SQLiteException: database is locked: BEGIN EXCLUSIVE;
04-09 14:41:27.161: E/AndroidRuntime(20745): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
04-09 14:41:27.161: E/AndroidRuntime(20745): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1772)
04-09 14:41:27.161: E/AndroidRuntime(20745): at android.database.sqlite.SQLiteDatabase.beginTransactionWithListener(SQLiteDatabase.java:536)
04-09 14:41:27.161: E/AndroidRuntime(20745): at android.database.sqlite.SQLiteDatabase.beginTransaction(SQLiteDatabase.java:490)
04-09 14:41:27.161: E/AndroidRuntime(20745): at de.greenrobot.dao.AbstractDao.executeInsert(AbstractDao.java:344)
04-09 14:41:27.161: E/AndroidRuntime(20745): at de.greenrobot.dao.AbstractDao.insert(AbstractDao.java:293)
04-09 14:41:27.161: E/AndroidRuntime(20745): at abc.def.ghi.MyDao.persist(MyDao.java:342)
04-09 14:41:27.161: E/AndroidRuntime(20745): at abc.def.ghi.persistservice2.PersistThread.run(PersistThread.java:36)