greendao
是否适用于多进程环境?
查看源代码,由于处理缓存的方式和其他一些事情,它似乎不支持多进程环境。我正在寻找开发商的确认或更多细节。
通过我们当前的测试,我们可以在多个线程的1个进程中运行良好。但是,当我们引入访问同一数据库的单独进程时,我们不断获得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)