作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在某些设备上遇到上述错误(很少见,到目前为止只有 2 次):
android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 3850)
at android.database.sqlite.SQLiteConnection.nativeExecuteForString(Native Method)
at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:679)
at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:361)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:236)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:200)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
at ***.a(***.java:115)
我的代码中的第 115 行如下:
// here the exception occurs
SQLiteDatabase db = SQLiteDatabase.openDatabase(pathApp, null, SQLiteDatabase.OPEN_READONLY);
// ...
db.close();
故事
我所做的是:
就是这样。这适用于数千台设备。我的应用程序肯定只会访问数据库,我对此非常确定
问题
有谁知道是什么导致了这个问题?
也许是有趣的事实
最佳答案
我最近遇到了一个类似的问题,我的应用程序在所有 Android 设备上运行良好,但运行 OxygenOS 2.1 的 OnePlus Two 除外。
在调查问题后,这个特定的组合似乎非常敏感,并且会在某种数据库锁上崩溃。就我而言,我的应用程序在第一次运行时将新数据库复制到设备,然后检查数据库版本以查看是否需要更新。在检查时它在这些设备上崩溃了。我在我的代码中意识到我正在打开一个单独的数据库实例,而不是在检查版本时使用当前打开的数据库。更改代码以避免打开数据库的单独实例后,应用程序不再在 OnePlus 上崩溃。
我的建议是不要在你的应用程序中打开多个数据库实例,或者尝试先关闭数据库再打开它(也许你的复制方法没有关闭数据库或者正在使用同一数据库的另一个实例)。
关于android - SQLiteDiskIOException : disk I/O error (code 3850),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32763107/
我是一名优秀的程序员,十分优秀!