如何找到我的sqlite在Android中泄漏的位置

时间:2016-03-26 09:19:08

标签: android sqlite android-debug

当我运行应用程序并执行某些操作时,

数据库'/data/user/0/project/database.db'的SQLiteConnection对象被泄露了!请修复您的应用程序以正确结束正在进行的事务,并在不再需要时关闭数据库。

我如何调试

4 个答案:

答案 0 :(得分:3)

自GINGERBREAD以来,ANDROID引入了一些功能,供开发人员检测可关闭的泄漏对象。

private static final boolean DEVELOPER_MODE = true;

if (DEVELOPER_MODE) {
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects()
                .detectLeakedClosableObjects()
                .penaltyLog()
                .penaltyDeath()
                .build());
    }

在活动中使用此代码块,以便检测泄漏的可关闭对象。

我希望这会对你有帮助......

答案 1 :(得分:0)

每当您执行getWritableDatabase()getReadableDatabase()时,您必须在处理完成后关闭数据库连接 -

getWritableDatabase().close();

答案 2 :(得分:0)

检查您是否有一些未提交的交易 (一旦开始,你应该总是关闭交易)。 确保关闭光标然后关闭数据库。

答案 3 :(得分:0)

科特林

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()
   }
}