如何在Android中找到我的sqlite泄漏的位置
当我运行应用程序并执行一些操作时 数据库“/data/user/0/project/database.db”的SQLiteConnection对象泄漏!请修复应用程序以正确结束正在进行的事务,并在不再需要时关闭数据库 如何调试此每当您执行getWritableDatabase或getReadableDatabase时,您必须在处理完成后通过以下方式关闭数据库连接-如何在Android中找到我的sqlite泄漏的位置,android,sqlite,android-debug,Android,Sqlite,Android Debug,当我运行应用程序并执行一些操作时 数据库“/data/user/0/project/database.db”的SQLiteConnection对象泄漏!请修复应用程序以正确结束正在进行的事务,并在不再需要时关闭数据库 如何调试此每当您执行getWritableDatabase或getReadableDatabase时,您必须在处理完成后通过以下方式关闭数据库连接- getWritableDatabase().close(); 检查您是否有一些未提交的事务 一旦开始,您应该始终关闭事务。 确保先
getWritableDatabase().close();
检查您是否有一些未提交的事务
一旦开始,您应该始终关闭事务。
确保先关闭光标,然后关闭数据库 自从GINGERBREAD之后,ANDROID为开发者引入了检测可关闭泄漏对象的功能
private static final boolean DEVELOPER_MODE = true;
if (DEVELOPER_MODE) {
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
在要检测泄漏的可关闭对象的活动中使用此代码块
我希望这能帮助你……Kotlin
在使用db的地方发布代码。
var db: SQLiteDatabase? = null
var cursor: Cursor? = null
try {
db = getReadWriteDB()
val query = "Select * From Table"
cursor = db.rawQuery(query, null)
} catch (e: Exception) {
e.printStackTrace()
} finally {
// First close the cursor
if (cursor != null && !cursor.isClosed()) {
cursor.close()
}
// second close the database
if (db != null && db.isOpen) {
db.close()
// Release the database reference
db.releaseReference()
}
}